2017-06-26 21 views
0

我試圖做一個程序,使用for循環來計算索引D的集合。但是我有一個問題,因爲索引的長度不一樣。如何使用for循環來確定一組索引?

例子:

z = [0 0 0 0 0 0 1] 

v(1,:) = [1 0 0 0 1 0 1] 
v(2,:) = [0 1 0 0 1 1 1] 
v(3,:) = [0 0 1 0 1 1 0] 
v(4,:) = [0 0 0 1 0 1 1] 

v(1,:) = find(v(1,:)~=z); 
v(2,:) = find(v(2,:)~=z); 
v(3,:) = find(v(3,:)~=z); 
v(4,:) = find(v(4,:)~=z); 

we obtain : 
D(1,:) = [1 5]; 
D(2,:) = [2 5 6]; 
D(3,:) = [3 5 6 7]; 
D(4,:) = [4 6]; 

代碼:

for aa = 1:4 
    D(aa,:) = [find(v(aa,:)~=z)]; 
end 

無法工作,因爲length(D(1,:))~=length(D(2,:))~=length(D(3,:))

如何我可以用一個循環來確定設置索引d的?

謝謝你的幫助!

回答

1

一種解決方案可以使用cell類似如下:

for aa = 1:4 
    D{aa} = [find(v(aa,:)~=z)]; 
end 
+0

謝謝你,它的工作原理。但是我不得不用D來計算最小值,除了使用單元格之外,你有另一種解決方案來提出我嗎? – m2016b

+0

我的榮幸。你可以像矩陣一樣遍歷'cell'。另外,你可以在另一個問題中通過'cell'詳細詢問你的問題。 – OmG

0

可以使用矩陣D,但事先對其進行初始化,如:

D = ones(size(v)) + length(z) 

然後填充它喜歡:

for ii = 1:size(z,1) 
    D(ii,v(ii,:)~=z) = find(v(ii,:)~=z); 
end 

請注意,我將length of v添加到矩陣的,這樣你就可以確定矩陣中的預定義數字大於任何索引,因此min()不會被嚇倒。