在矩阵中查找多个子矩阵

时间:2014-01-22 13:58:21

标签: matlab matrix

我想找到它们的值存在于矩阵中的所有[d1 by d2]子矩阵,例如,假设我有以下内容:

pvec = [ 1   1
         2   2 
         3   4
         4   7]

m = [ 1 4 1 1;
      2 2 1 1;
      2 2 2 1;
      3 4 2 1;
      1 1 3 3;
      2 2 5 6 ]

[1 1]的指数点:(1,3),(1,4),(2,3),(2,4),(5,1)和(5,2)。这些点应该一起返回所有行出现,如[1 1]情况(我不在乎它们是实际(i,j)点还是线性索引)。

正如我所说,我知道如何为这样的固定pvec执行此操作:

m(find(ismember(m, pvec(1, :)) & ismember(m, pvec(2, :)) & ismember(m, pvec(3, :))))

我认为你明白了,但问题是pvec在脚本的每次迭代中可能会改变大小,我不知道如何一次性完成它们。任何人都知道如何做到这一点?

我自己找到了答案;虽然不是很优雅。

idc = [];
Ig = imread(someimg);
padvec = [ ... ] % some pad vec
for i = 1:size(padvec,1)
    idc = [idc, find(ismember(Ig, padvec(i, :)))'];
end

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

pvec = [ 2   2 
         3   4
         4   7]

m = [1, 4
     2, 2
     2, 2
     3, 4
     1, 1
     2, 2]

m(ismember(m,pvec, 'rows'), :)

ans =

   2   2
   2   2
   3   4
   2   2