将matlab矩阵转换为向量

时间:2009-12-19 00:54:42

标签: matlab vector matrix

我想在预定义的位置获得Matlab矩阵元素的向量。例如,我有以下

>> i = [1,2,3];
>> j = [1,3,4];
>> A = [1,2,3,4; 5,6,7,8; 9,10,11,12; 13,14,15,16]

A =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

我想要一个向量,它会在A的位置给我i,j的值。我试过了

A(i,j)

ans =

     1     3     4
     5     7     8
     9    11    12

但这不是我想要的。我想得到以下

>> [A(i(1),j(1)); A(i(2),j(2));A(i(3),j(3))]

ans =

     1
     7
    12

matlab的语法是什么?请避免建议使用循环或任何非矢量化形式的东西,因为我需要快速完成。希望会有一些内置功能。

4 个答案:

答案 0 :(得分:4)

以最快的方式获取它,使用线性索引

A((j-1)*size(A,1)+i)

请记住,MATLAB使用列主要顺序。

答案 1 :(得分:3)

A(sub2ind(size(A),i,j))

如果您真的渴望速度,可以尝试制作自己的sub2ind.m副本,删除该功能所做的所有输入检查。

答案 2 :(得分:2)

要了解如何执行此操作,最好了解matlab如何存储其数组。在矩阵中:

i = [1,2,3];
j = [1,3,4];
A = [1,2,3,4; 5,6,7,8; 9,10,11,12; 13,14,15,16]

matlab存储DOWN列的元素。所以他们实际上按顺序驻留在内存中:

{1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16}

您实际上可以使用SINGLE索引索引二维数组。这就是sub2ind技巧的作用原因。由于您要获取的元素是第1,第10和第15个元素,因此以列式顺序存储,

singleIndex = [1 10 15];
A(singleIndex)
ans =
     1     7    12

要确认sub2ind给出了该索引列表,请尝试...

ind = sub2ind([4 4],i,j)
ind =
     1    10    15

答案 3 :(得分:0)

现在我正在使用它:

>> diag(A(i,j))

ans =

     1
     7
    12