作者qwerty754892 (Q仔)
看板MATLAB
标题[讨论] 如何输出矩阵中符合条件的座标?
时间Sun Jun 3 13:22:48 2018
令f矩阵为下
0 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 1
0 1 0 0 0 0 1 0 0
将f矩阵中,值为1的座标(x,y)标出
例如:(1,6)、(2,4)、(2,9)...
clear all
close all
clc
f=[0 0 0 0 0 1 0 0 0;0 0 0 1 0 0 0 0 1;0 1 0 0 0 0 1 0 0]
for i=1:size(f,1)
for j=1:size(f,2)
if f(i,j)==1
X(i)=i
Y(j)=j
end
end
end
我想得到的结果应该是
x=[1 2 2 ...]
y=[6 4 9 ...]
但我得到的数值为
x=[1 2 3]
y=[0 2 0 4 0 6 7 0 9]
大概知道原因,是i=1的时候
图像就已经抓到f值是1了
所以x轴的部分就给1
但是y轴的部分根本还没带入,就已经符合条件
所以得到的y会有0出现
那我改写成这样
clear all
close all
clc
f=[0 0 0 0 0 1 0 0 0;0 0 0 1 0 0 0 0 1;0 1 0 0 0 0 1 0 0]
%设一个 P矩阵储存(1,1)、(1,2)、(1,3)....去带入
for i=1:size(f,1)
for j=1:size(f,2)
P=[i j]
if f(P(1),P(2))==1
X(i)=P(1)
Y(j)=P(2)
end
end
end
但结果还是跟原本一样,没有办法正确输出
後来找到一个指令是[x y]=find(f==1)
得到结果如下
x =
3
2
1
3
2
y =
2
4
6
7
9
也就是得到(3,2) (2,4) (1,6).... 这样
能够正确输出座标了,但还是不服气
想知道我的写法到底哪里不行,要怎麽改
请各位ML大神指导一下,谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 117.19.5.131
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1528003370.A.D44.html
1F:推 sppmg: [x,y] = ind2sub([3,3], find(magic(3)>5)) 06/03 14:16
2F:→ qwerty754892: 谢谢楼上,不过这个结果似乎也是跟find结果一样 06/03 14:27
3F:→ qwerty754892: ind2sub好像多此一举? 06/03 14:28
4F:→ qwerty754892: 另外ind2sub(siz,ind)的siz是要跟原矩阵一样吗? 06/03 14:30
5F:→ sppmg: ind2sub 就是转换而已,所以siz就是原矩阵大小 06/03 15:17
6F:→ sppmg: 你的情况就是[3,9]。由於find出来是1维index,所以要转换 06/03 15:18
7F:→ sppmg: 更正:查了手册,find 可以直接输出sub XD, ind2sub 免了 06/03 15:21