Matrix 使用向量作为矩阵行的列索引,以八度为单位

Matrix 使用向量作为矩阵行的列索引,以八度为单位,matrix,vector,indexing,octave,Matrix,Vector,Indexing,Octave,假设我有一个矩阵a和一个向量B。是否可以使用向量B中的值作为索引,从矩阵a的每一行中选择一个值?例如: A = [1, 2, 3; 4, 5, 6; 7, 8, 9;] B = [1;3;1] C = A(B) or C = A(:,B) giving: C = [1; 6; 7] 当然,我可以用for循环来实现这一点,但是对于更大的矩阵,这需要一段时间。我还想用它以以下方式制作一个逻辑矩阵: A = zeros(3,3) B = [1;3;1] A(B)

假设我有一个矩阵a和一个向量B。是否可以使用向量B中的值作为索引,从矩阵a的每一行中选择一个值?例如:

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

B = [1;3;1]

C = A(B) or C = A(:,B) 

giving: 

C = [1; 6; 7]
当然,我可以用for循环来实现这一点,但是对于更大的矩阵,这需要一段时间。我还想用它以以下方式制作一个逻辑矩阵:

A = zeros(3,3)

B = [1;3;1]

A(B) = 1

A = [1, 0, 0;
     0, 0, 1;
     1, 0, 0]

谢谢您能给我的任何建议。

您需要为此创建线性索引。以你为例:

octave-3.8.2> a = [1  2  3
                   4  5  6
                   7  8  9];
octave-3.8.2> b = [1 3 1];
octave-3.8.2> ind = sub2ind (size (a), 1:rows (a), b);
octave-3.8.2> c = a(ind)
c =

   1   6   7

根据我的理解,创建逻辑矩阵的方法如下:

>A = eye(3,3)

>B = [1;3;1]

>A(B,:) =
>
>[ 1   0   0;
>  0   0   1;  
>  1   0   0; ]

谢谢你,伙计。我在看sub2ind,但我自己没办法弄清楚。现在我可以重写我的代码片段并放弃循环了。:)