我试图在多维数组中找到仅在一列中的值。当搜索整个多维数组时,我可以找到正确的值。但是,如果我试图限制多维数组中的查找,只说第二列的值不是预期的值。
代码示例和正确的输出:
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
作为与row
和page
相同大小的矢量,您当然可以使用col = repmat(col,size(row))
来实现它。