0

给定一个矩阵A,它的对角线和下三角部分都有零:

A = triu(rand(5,5), 1) % example

A =
0.00000   0.47474   0.55853   0.30159   0.97474
0.00000   0.00000   0.03315   0.74577   0.20878
0.00000   0.00000   0.00000   0.54966   0.76818
0.00000   0.00000   0.00000   0.00000   0.82598
0.00000   0.00000   0.00000   0.00000   0.00000

我想将A转换为跳过所有零元素的紧凑向量v

v = [0.47474 0.55853 0.30159 0.97474 0.03315
     0.74577 0.20878 0.54966 0.76818 0.82598]

后来我想从向量转换回矩阵。

问题:在这两种表示之间进行转换的优雅方法是什么?

4

3 回答 3

6

我会从一个上三角矩阵开始

B = triu(ones(5,5), 1)

那么v可以定义为:

v = A(B==1)

v转换回A

A = B
A(B==1) = v
于 2012-11-12T14:38:43.427 回答
1

因为 Matlab 以列优先顺序存储数组,所以我不能在一个语句中做到这一点,现在还不行,但这里有一个两个语句的解决方案:

B = A';

v = B(B~=0)'

@dustincarr 的回答使我的进一步工作变得多余。

于 2012-11-12T14:28:29.663 回答
1
A = triu(rand(5,5), 1);
v = reshape(nonzeros(A'), [5 2])';
于 2020-03-28T02:46:33.690 回答