2012-03-10 8 views
4

は、私が持っているものです。ベクトルを作り直して行列を作る方法は?ここ

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 

そして、ここでは、私が取得したいものです。

[ 
    1, 2, 3, 4, 
    5, 6, 7, 8, 
    9, 10, 11, 12 
] 

行と列(例では3と4)の数は、既に知られています。

どうすればいいですか?

答えて

2

マット= vec2mat(VEC、matcol)が一度に1行を作成、matcol列の行列にベクトルVECを変換言います。 vecの長さがmatcolの倍数でない場合、余分なゼロはマットの最後の行に配置されます。マトリックスマットはceil(長さ(vec)/ matcol)の行を持ちます。

+0

ありがとう、chx、これは動作します! – izhak

+1

注!これには「通信システムツールボックス」が必要です。 「正しい」答えは「変形」です。 'reshape(vec、[]、matcol)'はベクトルを 'matcol'カラムを持つ行列に作り直します。行数は、再形成時にMATLABによって自動的に計算されます。 –

+0

リシェイプソリューションは、(少なくとも私がテストした正方行列についても)より良い性能を持っています。 – rnoodle

5

reshape

b = reshape(a, 4, 3)'あなたの例のために働くだろうします。要素は元のものから取り出され、新しい行列に列方向に挿入されます。

さらに、reshapeは、組み込みのMATLAB関数です。通信ツールボックスを必要とする他の解決策、例えばvec2matが存在する。このguide

+0

本当ですか? "ベクトル入力が与えられた場合、reshapeは一度に1つの行ではなく、一度に1つの行列を作成します。" – chx

+0

@chxだから、私は4行、3列を行い、結果を転置しました。私もあなたの答えが好きです、私は彼らは両方とも動作すると思います。 – tmpearce

+0

ああ、私は転置を忘れてしまった。 – chx