異なる列数の行列の連結について

96 Ansichten (letzte 30 Tage)
健気 大川
健気 大川 am 25 Okt. 2021
Kommentiert: 健気 大川 am 28 Okt. 2021
例えば、異なる列数を持つ、y1=[1;2;3;4;5;6;7;8;9;10]とy2=[11;12;13;14;15]があったとします。
これを別の行列y(:,1)=y1,y(:,2)=y2のように結合したいです。どなたかお時間がある方助言をお願い致します。
(連結させる前の元の行列は必ずn×1 (nは任意の数)です。)
(現在は2つの行列だけですが、それ以上の行列も連結するようにしたいです)

Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 25 Okt. 2021
Bearbeitet: Atsushi Ueno am 26 Okt. 2021
上記リンク先を踏まえ考えられる方法を2つ挙げます
  • ベクトルのサイズを一致させて連結し行列にする(上記リンク先と同じ方法です)
  • (空いた要素はゼロでなくNaNで埋めて、rmmissing関数でNaNを除外して取り出すべきです)
  • 上記リンク先のこの方法は、ベクトルだけでなく複数列の行列も連結可能です
y1=[1;2;3;4;5;6;7;8;9;10];
y2=[11;12;13;14;15];
y3=[1;1;3;4;15];
y4=[11;12;13;14];
y5=[1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1];
n = 4; a = 0;
for i = 1:n
eval(['sy' num2str(i) ' = size(y' num2str(i) ');']);
eval(['a = max(a, sy' num2str(i) ');']);
end
a = a(1); y = [];
for i = 1:n
eval(['y = [y,[y' num2str(i) ';NaN(abs([a 0]-sy' num2str(i) '))]];']);
end
y
y = 10×4
1 11 1 11 2 12 1 12 3 13 3 13 4 14 4 14 5 15 15 NaN 6 NaN NaN NaN 7 NaN NaN NaN 8 NaN NaN NaN 9 NaN NaN NaN 10 NaN NaN NaN
rmmissing(y(:,4))
ans = 4×1
11 12 13 14
  • 行列ではなくセル配列で纏める
y = {};
for i = 1:n
eval(['y = [y, y' num2str(i) '];']);
end
y
y = 1×4 cell array
{10×1 double} {5×1 double} {5×1 double} {4×1 double}
y{4}
ans = 4×1
11 12 13 14
  3 Kommentare
Atsushi Ueno
Atsushi Ueno am 26 Okt. 2021
回答を変更しました。機能は変わりませんが、変数nを指定して任意の数まで行列の連結が可能です。
おっと「eval警察」が来ているので私は逃げます。
健気 大川
健気 大川 am 28 Okt. 2021
何度も詳しく教えて頂きありがとうございます。無事解決いたしました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!