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]

後で、ベクトルから行列に変換したいと思います。

質問: これら 2 つの表現を変換するエレガントな方法は何ですか?

4

3 に答える 3

6

私は1つの上三角行列から始めます

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 は配列を列優先の順序で格納するため、これを 1 つのステートメントで行うことはできませんでしたが、これは 2 つのステートメントによる解決策です。

B = A';

v = B(B~=0)'

@dustincarrの答えは、私によるさらなる作業を冗長にします。

于 2012-11-12T14:28:29.663 に答える