【问题标题】:MATLAB indexing questionMATLAB 索引问题
【发布时间】:2011-06-18 01:40:19
【问题描述】:

我有一个矩阵,例如

A = [ 1 2 3; 4 5 6; 7 8 9] ;

和一个大小为 1x3 的向量,它指定每行中的哪个元素是我要查找的元素 - 即如果

vector = [ 1 2 1 ]

那么想要的输出是

[ 1 5 7 ]

因为1 是第 1 行中的第 1 个元素,5 是第 2 行中的第 2 个元素,7 是第 3 行中的第 1 个元素排。

我如何实现这一目标?找不到执行此操作的内置函数,这让我很惊讶。

【问题讨论】:

标签: matlab indexing matrix


【解决方案1】:

这是Yochai's answer 的变体,但没有转置(这也是SUB2INDAmro's answer 中所做的基本操作):

 output = A((1:3)+3.*(vector-1));

或者对于任意大小的数组A

 nRows = size(A,1);
 output = A((1:nRows)+nRows.*(vector-1));

【讨论】:

    【解决方案2】:

    MATLAB 提供 SUB2IND 函数将行/列下标转换为线性索引:

    >> A = [1 2 3; 4 5 6; 7 8 9];
    >> idx = sub2ind(size(A),1:3,[1 2 1]);  %# rows: [1 2 3], cols: [1 2 1]
    >> A(idx)
         1     5     7
    

    【讨论】:

      【解决方案3】:

      有点难看,但diag(A(1:3,[1 2 1])) 可以解决问题。

      【讨论】:

      • 我做了同样的事情:diag(A(:,vector))'
      【解决方案4】:

      首先,Matlab 中的索引是从上到下的。
      所以在你的情况下 A[1] = 1 , A[2] = 4 , A[3] = 7

      也就是说,在 A' 上工作会更容易,因为它更简单。

      B = A';
      
      B((vector + [0:2].* 3))
      

      【讨论】:

      • 来自文档:“A(:)是A的所有元素,被视为一个列。”。作为旁注,以了解索引。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多