查找位于多维数组中一列中的值



我试图在多维数组中找到仅在一列中的值。当搜索整个多维数组时,我可以找到正确的值。但是,如果我试图限制多维数组中的查找,只说第二列的值不是预期的值。

代码示例和正确的输出:

A = [2 4 6; 8 10 12]
A(:,:,2) = [5 7 9; 11 13 15]
A(:,:,3) = [55 4 55; 167 167 154]
[row,col,page]=ind2sub(size(A), find(A(:,1,:)==4))
row =1,1
col =2,2
page =1,3

但是如果我试图使用以下命令限制查找到第二列

[row,col,page]=ind2sub(size(A), find(A(:,2,:)==4)) 
row =1,1
col =1,3
page =1,1

我得到的值与期望的值不同。我试图将多维查找限制为搜索所有页面、所有行和一个特定列。输出应该与第一个示例相同。我该如何解决这个问题?

对于[m,n,o]=size(A),您使用的是A(:,2,:)==4,它是一个矩阵n*1*o。ind2sub期望一个n*m*o矩阵。典型的方法是使用掩码:

mask=false(size(A));
mask(:,2,:)=true;
[i,j,k]=ind2sub(size(A), find((A(:,:,:)==4)&mask))

掩码选择您感兴趣的条目。

Daniel的答案是通过定义一个掩码,然后使用该掩码在整个数组中搜索。以下命令将搜索限制在所需的列,因此对于大型数组可能更快:

col = 2; %// desired column
[row, page] = ind2sub([size(A,1) size(A,3)], find(A(:,col,:)==4));

如果您需要col作为与rowpage相同大小的矢量,您当然可以使用col = repmat(col,size(row))来实现它。

相关内容

  • 没有找到相关文章

最新更新