matlab查找函数的实现
我试图在MATLAB中找到矩阵中所有非零元素的坐标。我知道matlab查找函数的实现,matlab,find,Matlab,Find,我试图在MATLAB中找到矩阵中所有非零元素的坐标。我知道find使这变得非常容易。问题是我需要先定义矩阵的长度,然后才能填充它。我相信使用查找是不可能的,因为它将生成自己的向量 所以我必须找到另一种方法。如果我正在寻找一个元素,它也会很容易。让我举个例子。假设我有一个500×500的矩阵M,在某处有60个。我想找到坐标。因此,我可以从以下几点开始: for i = 1:500 for j = 1:500 if M(i,j) == 1 row = i; c
find
使这变得非常容易。问题是我需要先定义矩阵的长度,然后才能填充它。我相信使用查找是不可能的,因为它将生成自己的向量
所以我必须找到另一种方法。如果我正在寻找一个元素,它也会很容易。让我举个例子。假设我有一个500×500的矩阵M
,在某处有60个。我想找到坐标。因此,我可以从以下几点开始:
for i = 1:500
for j = 1:500
if M(i,j) == 1
row = i;
col = j;
end
end
end
但我需要不止一个点,我需要在填充向量之前定义向量的长度。因此,我将赌矩阵中少于100个:
v = zeros(1,100)
w = zeros(1,100)
我基本上想要如何填充这个向量,如下所示。假设我已经填充了向量的N
元素,那么下一个将是:
for i = 1:500
for j = 1:500
if M(i,j) == 1 && i ~= v(1) && i ~= v(2) && ... && i ~= v(N) && j ~= v(1) && ... && i ~= v(N)
v(N+1) = i
w(N+1) = j
end
end
end
所以我需要另一个包含所有这些内容的for循环,它将通过向量v
和w
的元素运行,我需要一些循环来确保使用了正确的if语句
有人知道怎么做吗
亲切问候,
杰西我真的不明白查找
有什么问题
但是,如果您坚持使用嵌套循环实现自己的实现,那么
v = NaN(100,1);
w = NaN(100,1); % pre-allocate
ii=1;
for row=1:size(M,1)
for col=1:size(M,2)
if M(row,col) == 1
v(ii)=row;
w(ii)=col;
ii=ii+1; %counts howmany elements were found
end
end
end
v(isnan(v))=[]; %discard redundent elements
w(isnan(w))=[];
这里还有另一种方法,既好又浪费:
[jj,ii] = meshgrid(1:size(M,2),1:size(M,1));
inds = M~=0;
ii = ii(inds);
jj = jj(inds);
我不确定我是否理解您的意思,您知道您可以指定要查找多少元素作为参数返回吗?听起来像是一个…请解释您最终想要实现什么,而不是询问您在尝试实现过程中遇到的问题。您知道您的第二个实现不正确,对吗?那个人找不到所有的1。此外,如果你做得正确,[vw]
将等于[v2w2]=find(M)
…我只是不确定你在这里得到了什么…我不知道该说什么。使用逻辑索引而不是find
是“作弊”?@Shai:。。。我觉得很脏…:P