converting 3d matrix into a cell array

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 件のコメント

AT_HYZ
AT_HYZ 2024 年 3 月 22 日
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.

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

 採用された回答

Dyuman Joshi
Dyuman Joshi 2024 年 3 月 22 日

0 投票

@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

その他の回答 (1 件)

James Tursa
James Tursa 2024 年 3 月 22 日
編集済み: James Tursa 2024 年 3 月 22 日

0 投票

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.

カテゴリ

ヘルプ センター および File ExchangeLinear Algebra についてさらに検索

質問済み:

2024 年 3 月 21 日

回答済み:

2024 年 3 月 22 日

Community Treasure Hunt

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

Start Hunting!

Translated by