2014-01-03 4 views
1

У меня есть B-матрица N * 4 dim. Я хочу рассчитать среднее значение матрицы на основе последних значений столбца. Последний столбец имеет повторяющиеся значения в диапазоне от 1 до 3. Я хочу рассчитать среднее значение всех строк, у которых последний столбец имеет одинаковое значение. Я использую эту команду:Как вычислить среднее значение матрицы на основе значения столбца

l(it:,)=mean(B(i,:)) 

где it колеблется от 1 до 3 в петле и i имеет все показатели рядов, последний столбец = 1.Когда я запускаю этот код я получаю Sub scripted assignment dimension mismatch error. Может ли кто-нибудь указать, что не так в команде?

ответ

1

Рассмотрим следующий пример данных:

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 ]; 

Два возможных подхода:

  1. Использование logical indexing:

    result = NaN(3,3); 
    for k = 1:3 
        result(k,:) = mean(B(B(:,4)==k,1:3)); 
    end 
    
  2. Использование 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 
+0

Даже когда я пытаюсь запустить свой код я получить индексируются несоответствие размера назначение. Что может быть неправильным? – Keerthana

+0

Я не могу понять этот результат линии (k, :) = mean (B (B (:, 4) == k, 1: 3)); может у, пожалуйста, объясните? – Keerthana

+0

Когда я увеличиваю количество столбцов матрицы и меняю тусклый результат, я получаю несоответствие размерности подзаголовка. – Keerthana

1

Ваш вопрос не самый ясный, но я думаю Я знаю, что вы пытаетесь сделать.

Вы говорите, что i содержит индексы строк, представляющих интерес для каждого значения 1,2,3, поэтому я предполагаю, что вам требуется

mean_k = mean(mean((B(i,:))) 

для каждого к = 1,2,3. Очевидно, что вы должны пересчитывать i каждый раз, когда вы повторяете более 1,2,3 при определении соответствующих строк.

Функция mean при вызове матрицы не возвращает скаляр, она возвращает вектор строки, элементы которого являются средними для каждого столбца матрицы. Поэтому, чтобы получить среднее значение, вам нужно снова позвонить mean.

Имейте в виду, что это также включает в себя конечное значение столбца (который используется для классификации) в ваших общих средних расчетов