实现matlab查找功能

时间:2014-03-19 09:50:18

标签: matlab find

我试图在MATLAB中找到矩阵中所有非零元素的坐标。我知道find使这很容易。问题是我需要在填充之前定义矩阵的长度。我认为使用find是不可能的,因为它会创建自己的向量。

所以我必须找到另一种方式。如果我正在寻找1个元素,它也会很容易。让我举个例子。假设我的矩阵M为500×500,其中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循环,它将遍历向量vw的元素,我需要一些循环来确保正在使用正确的if语句

有没有人知道如何做到这一点?

亲切的问候,

杰西

2 个答案:

答案 0 :(得分:3)

这是另一种方式,很好&浪费:

[jj,ii] = meshgrid(1:size(M,2),1:size(M,1));        
inds = M~=0;
ii   = ii(inds);
jj   = jj(inds);

答案 1 :(得分:2)

老实说,我无法理解find的错误 但是,如果您坚持使用嵌套循环实现自己的实现,那么

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))=[];