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

132 visualizaciones (últimos 30 días)
健気 大川
健気 大川 el 25 de Oct. de 2021
Comentada: 健気 大川 el 28 de Oct. de 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つの行列だけですが、それ以上の行列も連結するようにしたいです)

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!