2016-09-15 4 views
-1

У меня есть матрица с тремя столбцамиизвлекать информацию из матрицы с тремя столбцами

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

Я использовал это G (y (k, 1), y (k, 2)) = y (k, 3); G (y (k, 2), y (k, 1)) = y (k, 3); –

ответ

0

это возможный soultion с помощью 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,:) 
+0

Thx @ rahnema1 \t dropbox.com/s/jckdmg1p05v8lv7/y.mat?dl=0 см. Ссылку (некоторые значения в столбце 1 существуют также в столбце 2, например 8) –

+0

@Abdulrahman Answer updated. может быть то, что вы хотите – rahnema1

+0

Спасибо 4 ур help @ rahnema1 –

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