Как рассчитать среднее значение матрицы на основе значения столбца
У меня матрица B N*4 тусклая. Я хочу рассчитать среднее значение матрицы на основе значений последнего столбца. Последний столбец имеет повторяющиеся значения в диапазоне от 1 до 3. Я хочу вычислить среднее значение для всех строк, последний столбец которых имеет одинаковое значение. Я использую эту команду:
l(it:,)=mean(B(i,:))
где it
колеблется от 1 до 3 в цикле и i
имеет все индексы строк, последний столбец =1. Когда я запускаю этот код, я получаю Sub scripted assignment dimension mismatch error
, Кто-нибудь может указать, что не так в команде?
2 ответа
Рассмотрим следующие примеры данных:
B = [ 0.4000 0.3000 0.2000 1.0000
0.3000 0.2000 0.1000 2.0000
0.7000 0.8000 0.6000 1.0000
0.3000 0.4000 0.8000 2.0000
0.7000 0.5000 0.5000 3.0000
0.1000 0.3000 0.9000 3.0000
0.6000 0.4000 0.5000 1.0000 ];
Два возможных подхода:
Использование логической индексации:
result = NaN(3,3); for k = 1:3 result(k,:) = mean(B(B(:,4)==k,1:3)); end
С помощью
accumarray
:result = NaN(3,3); for k = 1:3 result(:,k) = accumarray(B(:,4), B(:,k), [], @mean, NaN); end
С данными примера, любой из вышеперечисленных дает
result =
0.5667 0.5000 0.4333
0.3000 0.3000 0.4500
0.4000 0.4000 0.7000
Ваш вопрос не самый ясный, но я думаю, что знаю, что вы пытаетесь сделать.
Вы говорите, что i
содержит индексы строк интереса для каждого значения 1,2,3, поэтому я предполагаю, что вам требуется
mean_k = mean(mean((B(i,:)))
для каждого k = 1,2,3. Очевидно, вы должны пересчитывать i
каждый раз, когда вы итерируете более 1,2,3 при определении соответствующих интересующих строк.
mean
Функция при вызове в матрице не возвращает скаляр, она возвращает вектор строки, элементы которой являются средним значением каждого столбца матрицы. Поэтому, чтобы получить среднее значение, нужно позвонить mean
опять на результат.
Имейте в виду, что это также включает в себя окончательное значение столбца (которое вы используете для классификации) в ваших общих средних расчетах