MATLAB Finding&在矩阵中打印特定值的位置

时间:2017-03-01 02:52:41

标签: matlab for-loop

我正在尝试在矩阵B中找到所有零的位置,然后打印它们

B=randi([-1 4],5)

 0    -1     1     1     2
 1     0     0     4     0
 1     1     0    -1     2
 3    -1     4     3     0
 3     2     3     3    -1

 [x,y]=find(B==0)

x =
 1
 2
 2
 3
 2
 4

y =
 1
 2
 3
 3
 5
 5

因此,零位于(1,1)(2,2)(2,3)(3,3)(2,5)(4,5)。 我希望它们打印为1x1,2x2,2x3,3x3,2x5,4x5

使用'find(A ==)'代码很容易读取x,y对,但是很难 如果矩阵的大小增长。比如说,矩阵B的大小是99X99。如何找到所有零的位置并打印出来?

所以我试着写一个代码来做它,但我一直都失败了。

[x,y]=find(B==0);

for i=1:length(x)

    for j=1:length(y)

    end 

    fprintf('%g x %g\n',x(i),y(j))

end

我运行我的剧本。

>> Untitled8

1 x 5

2 x 5

2 x 5

3 x 5

2 x 5

4 x 5

所以我的MATLAB代码正确地找到了零的x位置(行#),但是对于y位置(列#)只打印了5个。

我认为这是因为嵌套for循环重复并完成内部循环,然后移动到外部循环。

无论如何i和j同时同时增加,以便我可以在矩阵中打印零的位置吗?

谢谢

2 个答案:

答案 0 :(得分:0)

试试这个:

[x,y]=find(B==0);

for i=1:length(x)

    fprintf('%g x %g\n',x(i),y(i))

end

向量x和y具有相同的长度,并且您要打印的对在这些向量中具有相同的索引号。

答案 1 :(得分:0)

您需要[row,col]=find(~X),请参阅MATLAB参考here