如何使用for循环来确定索引集?

时间:2017-06-26 00:09:06

标签: matlab matrix

我试图创建一个使用for循环来计算索引D集的程序。但是我有一个问题,因为索引的长度不一样。

示例:

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的集合?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

一种解决方案可以使用cell,如下所示:

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

答案 1 :(得分: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添加到了1的矩阵中,这样您就可以确定矩阵中的预定义数字大于任何索引,因此min()不会吓坏。< / p>