【问题标题】:MATLAB Finding & printing a position of a specific value in a matrixMATLAB 查找和打印矩阵中特定值的位置
【发布时间】:2017-03-01 02:52:40
【问题描述】:

我正在尝试查找矩阵 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 同时增加的情况,以便我可以打印矩阵中零的位置?

谢谢

【问题讨论】:

  • 为什么不只是disp([x y])?你真的需要x吗?

标签: matlab for-loop


【解决方案1】:

试试这个:

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

for i=1:length(x)

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

end

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

【讨论】:

  • @EricKim 如果这解决了您的问题,请接受答案。
  • 我是这个网站的新手,我不确定我是否接受了您的回答,但我点击了您的回答旁边的复选标记。这里是这样运作的吗?
【解决方案2】:

你需要[row,col]=find(~X),参见MATLAB参考here

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多