Есть ли способ сделать частичное среднее по матрице в Matlab - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть матрица (фактически таблица), которую я импортировал из файла:

    1.0000    1.9736
    4.0000    0.2016
    9.0000    0.0584
   10.0000    0.0495
    5.0000    0.1845
    2.0000    0.6873
    1.0000    1.4177
    2.0000    0.4699
    5.0000    0.1555
   10.0000    0.0435
   13.0000    0.0326
    8.0000    0.0860
    5.0000    0.1685
    4.0000    0.1956
    5.0000    0.1433
    8.0000    0.0675
   13.0000    0.0335
   13.0000    0.0327
   10.0000    0.0431
    9.0000    0.0582
   10.0000    0.0551
   13.0000    0.0308

Я хочу получить среднее значение каждого вхождения в левой колонке.То есть:

avg = [
  1.0000    1.69565
  2.0000    0.5786
  4.0000    0.1978]

и так далее.Я мог бы сделать это с помощью Wile или для группы, но это не способ Matlab.Так как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011
a=[randi(5,10,1) rand(10,1)];

a =

4.0000    0.4387
1.0000    0.3816
2.0000    0.7655
1.0000    0.7952
1.0000    0.1869
5.0000    0.4898
4.0000    0.4456
2.0000    0.6463
5.0000    0.7094
1.0000    0.7547

[uniqueID,~,uniqueInd]=unique(a(:,1));
[uniqueID accumarray(uniqueInd,a(:,2))./accumarray(uniqueInd,1)]

ans =

1.0000    0.5296
2.0000    0.7059
4.0000    0.4422
5.0000    0.5996
1 голос
/ 08 декабря 2011

Если ваша матрица называется a, попробуйте

>> accumarray(grp2idx(a(:,1)),a(:,2),[],@mean)
ans =
       1.6957
       0.5786
       0.1986
      0.16295
      0.07675
       0.0583
       0.0478
       0.0324

Обратите внимание, что grp2idx является частью набора инструментов статистики. Если у вас этого нет, вы можете использовать команду unique для получения тех же результатов.

...