从具有三列的矩阵中提取信息

时间:2016-09-15 11:22:19

标签: matlab

我有一个包含三列的矩阵

https://www.dropbox.com/s/jckdmg1p05v8lv7/y.mat?dl=0 即。

E1  E2      W
6   1464    0.36
6   1534    0.27
6   1585    0.27
8   1331    0.332
11  445     0.39
13  844     0.286
14  12      0.126
18  952     0.31
19  2376    0.32
20  394     0.22
20  399     0.22
20  589     0.22
21  321     0.22
21  1187    0.22
21  2509    0.22
22  1187    0.22
23  2235    0.22
24  2376    0.22
25  541     0.14
26  229     0.22
26  321     0.22
26  1187    0.22
26  2054    0.22
27  394     0.53
27  541     0.31
28  394     0.22
28  781     0.22

我使用了这个条件

for k=1:size(y,1)
    G(y(k,1),y(k,2))=true;
    G(y(k,2),y(k,1))=true;
end
B=cellfun(@(x1) find(x1),num2cell(G,2),'un',0);

提取如下链接信息:

1   394
2   2378
3   282
4   282
5   536
6   [1464,1534,1585]
7   2087
8   [394,399,1331]
9   1187

我需要第三列包含重量

e.i. {6,[1464,1534,1585],[0.36;0.27;0.27]}

我试图使用上述条件,但我没有得到正确的值。有谁知道怎么做?

1 个答案:

答案 0 :(得分:0)

这可能是使用accumarray的灵魂:

    a=[...
6   1464    0.36
6   1534    0.27
6   1585    0.27
8   1331    0.332
11  445     0.39
13  844     0.286
14  12      0.126
18  952     0.31
19  2376    0.32
20  394     0.22
20  399     0.22
20  589     0.22
21  321     0.22
21  1187    0.22
21  2509    0.22
22  1187    0.22
23  2235    0.22
24  2376    0.22
25  541     0.14
26  229     0.22
26  321     0.22
26  1187    0.22
26  2054    0.22
27  394     0.53
27  541     0.31
28  394     0.22
28  781     0.22];
% concatenate a with its copy, columns 1 and 2 swapped regarding symmetric relations
a = [a ; [fliplr(a(: , 1:2)) , a(: , 3) ]];
%create proper increasing indices for use in accumarray
[S SI] = sort(a(:,1));
S2=[0; (cumsum(diff(S)>0))];
idx = a(:,1);
idx(SI) = S2+1;
%gather elemets for each category
c1=accumarray([idx],a(:,1),[],@(x) {x(1)});
c2=accumarray([idx],a(:,2),[],@(x) {x});
c3=accumarray([idx],a(:,3),[],@(x) {x});
%concatenate columns
out=([c1 c2 c3]);
% your example
out(1,:)