2017-06-26 7 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 

動作しない私は、インデックスDのセットを決定するためにループを使用することができますどのようにlength(D(1,:))~=length(D(2,:))~=length(D(3,:))

ため?

ありがとうございました!

答えて

1

一つの解決策は、以下のようなcellを使用することができます。

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

ありがとう、それは動作します。しかし、私は最小を計算するためにDを使用しなければなりません、セルの使用以外の私を提案する別のソリューションをお持ちですか? – m2016b

+0

私の喜び。あなたは 'cell'のような行列を反復処理することができます。また、別の質問で「セル」についての質問を詳細に行うことができます。 – OmG

0

あなたは行列Dを使用しますが、同様に事前にそれを初期化することができます。

for ii = 1:size(z,1) 
    D(ii,v(ii,:)~=z) = find(v(ii,:)~=z); 
end 
:次にようにそれを埋める

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

注意、私はlength of vをマトリックスに追加しましたマトリクスのあらかじめ定義された数字がどのインデックスよりも大きいことを確信するように、min()はフリークアウトしません。

関連する問題