使用向量作为列索引到矩阵的行中,在Octave中

tar*_*kki 6 indexing vector matrix 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]
Run Code Online (Sandbox Code Playgroud)

当然我可以用for循环来做这个,但是使用更大的矩阵需要一段时间.我还想用它来制作一个逻辑矩阵,方式如下:

A = zeros(3,3)

B = [1;3;1]

A(B) = 1

A = [1, 0, 0;
     0, 0, 1;
     1, 0, 0]
Run Code Online (Sandbox Code Playgroud)

感谢您能给我的任何建议.

car*_*aug 9

您需要为此创建线性索引.按照你的例子:

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
Run Code Online (Sandbox Code Playgroud)