【问题标题】:finding values located in one column in a multidimensional array查找位于多维数组的一列中的值
【发布时间】:2014-08-06 13:30:04
【问题描述】:

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

代码示例和正确输出:

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

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

【问题讨论】:

  • 据我了解,在搜索特定列时,您基本上希望找到行号和页码。因此,您可以专注于查找行号和页码。您可以使用它 - [row,~,page]=ind2sub([size(A,1) 1 size(A,3)],find(A(:,col_num,:)==4)),其中 col_num 将是您正在搜索的列号。诀窍是使用1 而不是size(A,2)

标签: arrays matlab multidimensional-array octave


【解决方案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))

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

【讨论】:

    【解决方案2】:

    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)) 来实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 2015-09-28
      • 2014-04-19
      • 1970-01-01
      • 2014-12-13
      相关资源
      最近更新 更多