Azzera filtri
Azzera filtri

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

105 visualizzazioni (ultimi 30 giorni)
健気 大川
健気 大川 il 25 Ott 2021
Commentato: 健気 大川 il 28 Ott 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つの行列だけですが、それ以上の行列も連結するようにしたいです)

Risposta accettata

Atsushi Ueno
Atsushi Ueno il 25 Ott 2021
Modificato: Atsushi Ueno il 26 Ott 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 Commenti
Atsushi Ueno
Atsushi Ueno il 26 Ott 2021
回答を変更しました。機能は変わりませんが、変数nを指定して任意の数まで行列の連結が可能です。
おっと「eval警察」が来ているので私は逃げます。
健気 大川
健気 大川 il 28 Ott 2021
何度も詳しく教えて頂きありがとうございます。無事解決いたしました。

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!