我想从大小为A
但不在对角线上的矩阵(3,3)
的元素创建一个列向量。因此,我在该输出向量中将有6
个元素。我怎么能这样做?
答案 0 :(得分:3)
使用它来获得这样的列向量,假设A
是输入矩阵 -
column_vector = A(eye(size(A))==0)
如果您不关心输出中元素的顺序,您还可以使用setdiff
和diag
-
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).';