我有一个矩阵A,
A = [1 2 0; 4 5 6; 7 8 9;]
1 2 0
4 5 6
7 8 9
Matlab有一个triu
函数,它执行以下操作,
triu(A)
1 2 0
0 5 6
0 0 9
我需要一个像这样的函数给我一个这样的矢量:
triu_vector(A) - > [1 2 0 5 6 9]
PS:A
的Trianguler矩阵可能包含0
。这就是为什么我不能使用Matlab的nonzeros
函数。
答案 0 :(得分:4)
如果订单无关紧要:
A(triu(true(size(A)))).'
如果订单 重要:
A = A.';
A(tril(true(size(A)))).'
答案 1 :(得分:3)
你可以这样做:
A = [1 2 0; 4 5 6; 7 8 9;];
I = true(size(A));
At = A';
At(tril(I))'
然后
ans =
1 2 0 5 6 9