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

时间:2014-06-16 16:48:02

标签: arrays matlab multidimensional-array octave

我试图在多维数组中查找仅在一列中的值。在搜索整个多维数组时,我可以找到正确的值。但是,如果我尝试将多维数组中的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

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

2 个答案:

答案 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作为与rowpage大小相同的向量,您当然可以使用col = repmat(col,size(row))来实现它。