converting 3d matrix into a cell array

4 ビュー (過去 30 日間)
AT_HYZ
AT_HYZ 2024 年 3 月 21 日
回答済み: Dyuman Joshi 2024 年 3 月 22 日
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 日
@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 日
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.

カテゴリ

Help Center および File ExchangeOperators and Elementary Operations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by