矩阵由matlab中的另一个矩阵索引?

时间:2013-05-03 13:10:18

标签: matlab matrix indexing

我有以下矩阵:

A=zeros(2,4);
D=[ 1 2;
    3 4;
    5 6;
    7 8];

v=rand(1,8);

例如:

v= [0.8147    0.9058    0.1270    0.9134    0.6324    0.0975    0.2785    0.5469]

现在,当我运行A(D)=v时,A变为:

A=[0.8147    0.9058    0.1270    0.9134;
   0.6324    0.0975    0.2785    0.5469]

当我将D条目更改为其他值时,我会得到A的不同配置,例如,如果我放入:

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

然后A变为:

A=[0.5469    0.2785    0.0975    0.6324;
   0.9134    0.1270    0.9058    0.8147]

有人知道这种索引是什么吗?

1 个答案:

答案 0 :(得分:2)

因此,为了更清楚,请将v重新定义为

v = 10:10:80

(即v = [10 20 30 40 50 60 70 80];

现在何时

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

然后

A(D)=v

    A =

    80    70    60    50
    40    30    20    10

让我们看看它是如何工作的。首先,当您按A索引D时,D会变平,因此A(D) = vA(D(:)) = v相同(测试它!)和

D(:)

ans =

     8
     6
     4
     2
     7
     5
     3
     1

因此,为了逐个分解,我们将A(D(1)) = v(1)替换为D(1)并且v(1)A(8) = 10,因此最后一个元素是10.进一步看几个元素。 A(D(4)) = v(4)成为A(2) = 40。但是哪个元素是A(2)?良好的线性索引首先按行排列(列主要排序),即

A(1) == A(1,1)
A(2) == A(2,1)
A(3) == A(1,2)
A(4) == A(2,2)
A(5) == A(1,3)
A(6) == A(2,3)
etc...

因此A(2)位于(2,1)位置......