我试图在多维数组中查找仅在一列中的值。在搜索整个多维数组时,我可以找到正确的值。但是,如果我尝试将多维数组中的find限制为只说第二列,则值不是预期值。
代码示例和正确输出:
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
我得到的值与预期值不同。 我试图限制多维查找以搜索所有页面,所有行和一个特定列。输出应与第一个示例相同。我该如何解决这个问题?
答案 0 :(得分:3)
使用[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))
掩码选择您感兴趣的条目。
答案 1 :(得分:1)
Daniel's answer通过定义一个掩码然后在应用了该掩码的整个数组中进行搜索来工作。以下内容将搜索限制为所需的列,因此对于大型数组可能更快:
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))
来实现它。