从对角线以外的元素创建矢量

时间:2014-10-31 16:11:38

标签: matlab matrix vector

我想从大小为A但不在对角线上的矩阵(3,3)的元素创建一个列向量。因此,我在该输出向量中将有6个元素。我怎么能这样做?

4 个答案:

答案 0 :(得分:3)

使用它来获得这样的列向量,假设A是输入矩阵 -

column_vector = A(eye(size(A))==0)

如果您不关心输出中元素的顺序,您还可以使用setdiffdiag -

的组合
column_vector = setdiff(A,diag(A))

答案 1 :(得分:3)

您还可以使用线性索引来访问对角线元素并将其置零。这将自动重塑为单个矢量:

A(1:size(A,1)+1:end) = [];

请记住,这会改变原始矩阵A。如果您不希望发生这种情况,请复制矩阵,然后对该副本执行上述操作。换句话说:

Acopy = A;
Acopy(1:size(A,1)+1:end) = [];

Acopy将包含最终结果。您需要创建一个从1开始的向量,并以A添加的矩阵1的行的增量结束,因为线性索引是 column-major ,因此用于访问矩阵的线性索引首先在特定列的每一行中向下进行。 size(A,1)允许我们按每列偏移,每次都添加1,以确保我们得到矩阵中每列的对角线系数。

答案 2 :(得分:3)

使用eye和逻辑否定,虽然这并不比Divakar的原始答案好,并且对于非常大的矩阵可能明显更慢

>> A = magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> A(~eye(size(A)))
ans =
     5
     9
     4
     2
     7
    14
     3
    10
    15
    13
     8
    12

答案 3 :(得分:0)

假设矩阵是方形的,

v = A(mod(0:numel(A)-1, size(A,1)+1) > 0).';