【问题标题】:Matlab - Finding values within a matrixMatlab - 在矩阵中查找值
【发布时间】:2015-03-15 13:35:11
【问题描述】:

如何在矩阵 B 中找到包含 A 中所有值的行并使用 Matlab 显示行的索引?

A= [2 5 6];

B=[1 2 4 9 10 15 27 30; 
   1 2 3 4 5 6 7 8; 
   1 2 3 5 6 9 22 101; 
   2 4 5 6 14 20 22 23]

谢谢

【问题讨论】:

  • 只是为了澄清:在您的示例中,您将获得第 2,3 和 4 行作为输出?或者[2 5 6] 向量是否需要连续?
  • 现在一切都好,下面的答案就是我想要的。谢谢

标签: matlab matrix


【解决方案1】:

3D 中有bsxfun -

ind = find(all(any(bsxfun(@eq,B,permute(A,[1 3 2])),2),3))

再次使用bsxfun,但将其保留在2D -

ind = find(sum(reshape(any(bsxfun(@eq,B(:),A(:).'),2),size(B)),2)==numel(A))

ismember -

ind = find(sum(reshape(ismember(B(:),A(:)),size(B)),2)==numel(A))

pdist2 来自Statistics and Machine Learning Toolbox -

ind = find(sum(reshape(any(pdist2(B(:),A(:))==0,2),size(B)),2)==numel(A))

knnsearch 再次来自Statistics and Machine Learning Toolbox-

[~,dists] = knnsearch(A(:),B(:))
ind = find(sum(reshape(dists==0,size(B)),2)==numel(A))

示例运行 -

A =
     2     5     6
B =
     1     2     4     9    10    15    27    30
     1     2     3     4     5     6     7     8
     1     2     3     5     6     9    22   101
     2     4     5     6    14    20    22    23
ind =
     2
     3
     4

【讨论】:

  • @Emanuel 考虑接受它,方法是单击解决方案旁边的复选标记。阅读更多关于它的信息here
  • 如果我有三个或四个矩阵来搜索 B 并获得相似的索引? A= [2 5 6]; C=[4 5 6]; D=[8 9 10; 2 9 19]; B=[1 2 4 9 10 15 27 30; 1 2 3 4 5 6 7 8; 1 2 3 5 6 9 22 101; 2 4 5 6 14 20 22 23] 我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多