2012-09-07 3 views
0

Я новичок в matlab, и я не могу найти соответствующий код, чтобы сделать следующее.среднее значение mtrix

У меня есть эта матрица (2 колонки):

3,2348 265 
2,2281 305 
2,9321 315 
3,6374 315 
3,9069 355 
1,8879 45 
2,5944 45 
3,3011 45 
3,7679 95 
4,1550 135 
2,7442 135 
4,1066 185 
2,1129 185 
1,7600 205 
3,0655 225 

и я хотел бы, чтобы преобразовать его в этом (2 колонки):

2,5945 45 
3,7680 95 
3,4497 135 
3,1098 185 
1,7601 205 
3,0656 225 
3,2349 265 
2,2281 305 
3,2849 315 
3,9070 355 

Цель состоит в том, что в Matrix1, для каждого повторяющееся значение в col2, мы делаем среднее значение соответствующих значений в col1.

Например, для линии 1, для 45 (col2) ->col1=(1,8880+2,5944+3,3012)/3 = 2,5945

+0

Где вы получаете ваши ценности от, 1,8880 + 2,5944 + 3,3012)/3? –

ответ

0

то вроде этого:

%A is the input matrix that you describe 
A = [32348 265 
    22281 305 
    29321 315 
    36374 315 
    ...] 

unique_values = unique(A(:, 2)); 
output = zeros(length(unique_values), 2); 
for i=1:length(unique_values) 
    output(i, 1) = mean(A(A(:, 2) == unique_values(i), 1)); 
end 
output(:, 2) = unique_values; 

unique(A(:, 2)) находит уникальные значения во втором столбце. Цикл for находит среднее значение для каждого из этих уникальных значений.

+0

большое спасибо! – user1654642

3

Это хорошая работа для accumarray:

A = [32348 265 
    22281 305 
    29321 315 
    36374 315]; %# fill the rest of the matrix 
[indices,ix] = sort(A(:,2),'ascend'); %# sort col2 in ascending order 
data = A(ix,1); %# sort the values (col1) in the same way 
groups = unique(indices); 
mean_value = accumarray(indices, data, [numel(groups) 1], @mean); 
%# the 4-argument version lets you specify a function to use (@mean in this case) 

new_A = [mean_value groups]; %# this is the desired output 

Для более чтений, проверьте this blog post.

+0

большое спасибо! – user1654642

0

Простейшее код, который я мог придумать (A ваша входная матрица):

A = sortrows(A,2); 
[B,i,j] = unique(A(:,2)); 
A = [accumarray(j,A(:,1),size(i),@mean),B]; 
+0

большое спасибо! – user1654642

Смежные вопросы