РЕДАКТИРОВАТЬ: Ах, я не видел вашего последнего редактирования.Просто используйте nanmean
than.
Итак, я попытался сохранить как можно больше вашего кода.
Прежде всего, давайте посмотрим на ваш скрипт, вызывающий вашу функцию:
inputArg1 = randi([-10 10], 50, 50)
for inputArg2 = 1:size(inputArg1, 2)
outputArg1(inputArg2) = averageColumn(inputArg1, inputArg2);
end
outputArg1
Просто общий совет: лучше извлекать размеры вводимых данных вместо жестко заданных значений.(Конечно, вы сами настраиваете здесь свой ввод, но постарайтесь помнить об этом.) Чтобы создать требуемый массив со средними, просто используйте номер столбца из цикла for
в качестве индекса массива.
Теперь давайте перейдем к вашей функции:
function outputArg1 = averageColumn(inputArg1, inputArg2)
% inputArg1 = an m x n matrix
% inputArg2 = the column# to average
% outputArg1 = the column average, or zero if all the values happen to be zero
for rowNum = 1:size(inputArg1, 1)
if inputArg1(rowNum, inputArg2) < 0
inputArg1(rowNum, inputArg2) = NaN;
end
end
outputArg1 = nanmean(inputArg1(:, inputArg2));
end
Опять же, не задавайте жесткие значения (rowNum
)!Кроме того, end
для этого цикла for
(ваше редактирование) отсутствовал.Оператор if
был слишком сложным, поскольку inputArg1(rowNum, inputArg2) = inputArg1(rowNum, inputArg2)
является избыточным.Просто установите все отрицательные входы на NaN
.Чтобы вычислить «среднее», просто используйте функцию mean
, используя флаг omitnan
.Или, если у вас есть доступ к «Инструментам статистики и машинного обучения», вы можете использовать функцию nanmean
.