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

我试图在MATLAB中找到矩阵中所有非零元素的坐标。我知道
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