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

106 ビュー (過去 30 日間)
健気 大川
健気 大川 2021 年 10 月 25 日
コメント済み: 健気 大川 2021 年 10 月 28 日
例えば、異なる列数を持つ、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つの行列だけですが、それ以上の行列も連結するようにしたいです)

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 10 月 25 日
編集済み: Atsushi Ueno 2021 年 10 月 26 日
上記リンク先を踏まえ考えられる方法を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 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 10 月 26 日
回答を変更しました。機能は変わりませんが、変数nを指定して任意の数まで行列の連結が可能です。
おっと「eval警察」が来ているので私は逃げます。
健気 大川
健気 大川 2021 年 10 月 28 日
何度も詳しく教えて頂きありがとうございます。無事解決いたしました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!