How to create matrix with other matrixes by joining them?

2 ビュー (過去 30 日間)
Csanad Levente Balogh
Csanad Levente Balogh 2021 年 1 月 11 日
編集済み: Stephen23 2021 年 1 月 11 日
Hi!
I'm trying to construct a matrix from the elements of several vectors, by joining them, For example:
a = [1 2 3];
b = [4 5 6];
c = [7 8 9];
d = [10 11 12];
And it should result in:
res =
1 4 2 5 3 6
7 10 8 11 9 12
Which is:
res =
a(1) b(1) a(2) b(2) a(3) b(3)
c(1) d(1) c(2) d(2) c(3) d(3)
I would need a method that can do this for any number of vectors with the same length.
Using a for loop and clever indexing would propably be one way, but I'm looking for a solution without using loops.

採用された回答

Stephen23
Stephen23 2021 年 1 月 11 日
a = [1 2 3];
b = [4 5 6];
c = [7 8 9];
d = [10 11 12];
res = reshape([a;c;b;d],2,[])
res = 2×6
1 4 2 5 3 6 7 10 8 11 9 12
  4 件のコメント
Csanad Levente Balogh
Csanad Levente Balogh 2021 年 1 月 11 日
Is it possible to do that to any number of vetors in any order? So let's say you have more vectors, and a given arrangement, for example:
a, b, c, d, e, f, g, h, i, j, k, l <-- vectors
arrangement = [3 4] % meaning you want to make a series of 3x4 matrixes from the elements
res=
a(1) b(1) c(1) d(1) a(2) b(2) c(2) d(2)
e(1) f(1) g(1) h(1) e(2) f(2) g(2) h(2) ...
i(1) j(1) k(1) l(1) i(2) j(2) k(2) l(2)
There is no rule for the number of input veectors, or number of the output rows, just vectors with the same number of elements, and an arrangement as above. The result than sould be the matrix created from the first elements of the vectors and than (concatonatd to it) the matrix cunstructed from the second elements, and so on. The result is a two dimensional array every time.
Stephen23
Stephen23 2021 年 1 月 11 日
編集済み: Stephen23 2021 年 1 月 11 日
"There is no rule for the number of input veectors"
The product of the arrangement vector exactly specifies how many vectors you would have to have.
In the general case rather than having lots of vectors stored as separate variables (which would be very bad data design) it would be much better to store them in one numeric matrix or one cell array. An example with a cell array:
C = num2cell(reshape(1:12*3,3,12).',2); % {[1,2,3],[4,5,6],...,[34,35,36]}
A = [3,4]; % arrangement
D = reshape(C,A(2),A(1)).';
M = reshape(vertcat(D{:}),A(1),[])
M = 3×12
1 4 7 10 2 5 8 11 3 6 9 12 13 16 19 22 14 17 20 23 15 18 21 24 25 28 31 34 26 29 32 35 27 30 33 36
If the data were stored in one numeric matrix then you could just use permute and reshape.

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

その他の回答 (1 件)

Mathieu NOE
Mathieu NOE 2021 年 1 月 11 日
hello
here you are
no loops
res = zeros(2,2*size(a,2));
res(1,1:2:2*size(a,2)) = a;
res(1,2:2:2*size(a,2)) = b;
res(2,1:2:2*size(a,2)) = c;
res(2,2:2:2*size(a,2)) = d;

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by