Matlab: вычисление среднего значения массива, вложенного в структуру - PullRequest
0 голосов
/ 09 мая 2018

У меня есть CDF struct call из 3 полей, все из которых являются двойными массивами, размером 1x48. (ниже) enter image description here

Мне нужно получить среднее (или среднее) поля cdfSR, но по каждому элементу структуры. Если я не достаточно ясен, мне нужно

[ sum(CDF(:).cdfSR(1))/895, sum(CDF(:).cdfSR(2))/895, ..., sum(CDF(:).cdfSR(48))/895 ]

Каждый раз, когда я пытаюсь реализовать «CDF (:). CdfSR (1)», я получаю сообщение об ошибке:

Ожидается один вывод из выражения индексации с фигурными скобками или точками, но было 895 результатов.

Однако я хочу получить все 895 результатов.

1 Ответ

0 голосов
/ 09 мая 2018

Выражение

CDF(:).cdfSR(1)

возвращает разделенный запятыми список с каждым из ii=1:895 элементов CDF(ii).cdfSR(1). Вы можете захватить их, используя квадратные скобки:

[CDF(:).cdfSR(1)]

эквивалентно

[CDF(1).cdfSR(1), CDF(2).cdfSR(1), CDF(3).cdfSR(1), ...]

Таким образом, код, который вы разместили, можно записать как:

[ sum([CDF(:).cdfSR(1)])/895, sum([CDF(:).cdfSR(2)])/895, ..., sum([CDF(:).cdfSR(48)])/895 ]

Но, конечно, это тоже нежизнеспособно. Поскольку CDF(ii).cdfSR является горизонтальным вектором, я предлагаю вам объединить их по вертикали:

vertcat(CDF(:).cdfSR)

vertcat(a,b,c) совпадает с [a;b;c]. Вы также можете использовать cat(1,...).

Это приводит к двойному массиву 895x48. Вы можете взять среднее значение, используя mean:

mean(vertcat(CDF(:).cdfSR), 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...