How can I repeat a 2-D array to create a 3-D array?
25 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Steve Francis
am 12 Jul. 2022
Kommentiert: Voss
am 13 Jul. 2022
A is a 2x3 array. I want to create a 3-D 'stack' so that each layer of the 3-D stack is identical to A. I've found that the following code gives the desired result:
A =[1 2 3;4 5 6];
for j=1:5
B(j,:,:)=A;
end
disp (squeeze(B(3,:,:))) % an example showing that any layer of the 3-D array is the same as A
Is there a more elegant way to do this? I tried using repmat but couldn't get the same result.
5 Kommentare
Stephen23
am 13 Jul. 2022
"That way the 2D slices are contiguous in memory..."
which also means that James Tursa's recommended approach will be more efficient (assuming that you mostly want to access those matrices).
Akzeptierte Antwort
Bruno Luong
am 12 Jul. 2022
A =[1 2 3;4 5 6];
B = repmat(reshape(A, [1 size(A)]),[5 1 1])
2 Kommentare
Bruno Luong
am 13 Jul. 2022
Bearbeitet: Bruno Luong
am 13 Jul. 2022
EDIT : my deleted comment moves here
If you do repeat 3rd dimension few other approaches
A =[1 2 3;4 5 6]; N = 2;
B = repmat(A,[1,1,N]), % James's comment
B = repelem(A,1,1,N),
B = A(:,:,ones(1,N)),
B = A + zeros(1,1,N),
Weitere Antworten (1)
Voss
am 12 Jul. 2022
% what you have now:
A =[1 2 3;4 5 6];
for j=1:5
B(j,:,:)=A;
end
% another way, using repmat and permute:
B_new = repmat(permute(A,[3 1 2]),5,1);
% the result is the same:
isequal(B_new,B)
2 Kommentare
Siehe auch
Kategorien
Mehr zu Resizing and Reshaping 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!