Filter löschen
Filter löschen

converting 3d matrix into a cell array

7 Ansichten (letzte 30 Tage)
AT_HYZ
AT_HYZ am 21 Mär. 2024
Beantwortet: Dyuman Joshi am 22 Mär. 2024
Hi,
I have a 3D matrix (1001x 259x 259) and want to convert to a cell array (1x1001) in which each cell array has 259x259 matrix (2D matrix). Could anyone help?
Thanks.
  1 Kommentar
AT_HYZ
AT_HYZ am 22 Mär. 2024
I tried the below code from this forum
https://www.mathworks.com/matlabcentral/answers/344044-transform-a-3d-matrix-into-cell-array
Mycell = num2cell(Mymatrix,[2 3]);
But I want the 2D matrix inside each cell array.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Dyuman Joshi
Dyuman Joshi am 22 Mär. 2024
@AT_HYZ, change the dimensions and use the above transformation -
abc = rand(1001,259,259);
%Shift dimensions
Mymatrix = shiftdim(abc, 1);
%Check size
size(Mymatrix)
ans = 1x3
259 259 1001
%Use num2cell
Mycell = num2cell(Mymatrix,[1 2]);
size(Mycell)
ans = 1x3
1 1 1001
%Change the size of the cell array as required
Mycell = reshape(Mycell, 1, 1001);
%Check the size of data inside a cell element
size(Mycell{1})
ans = 1x2
259 259

Weitere Antworten (1)

James Tursa
James Tursa am 22 Mär. 2024
Bearbeitet: James Tursa am 22 Mär. 2024
x = rand(1001,259,259);
result = arrayfun(@(k)squeeze(x(k,:,:)),1:size(x,1),'uni',false);
size(result)
ans = 1x2
1 1001
size(result{1})
ans = 1x2
259 259
But, be advised that for matrix manipulation it might be better to keep this data as a 3D array with dimensions 259x259x1001 (i.e., permute(x,[2 3 1])) so that you can take advantage of the page functions like pagemtimes, pagemldivide, etc.

Kategorien

Mehr zu Operators and Elementary Operations 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!

Translated by