How to convert from cell array to multidimensional array?

23 vues (au cours des 30 derniers jours)
Anton Filyayev
Anton Filyayev le 24 Nov 2015
I have a cell array that is 3x3 with each cell containing a vector of (1x1024). It is essentially the same as a 3x3 matrix with a dimension of 1024. How can I convert from cell array to multidimensional array that has these dimensions of (3,3,1024)? I tried cell2mat, but it simply concatenates them into a 3x3072 matrix.

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 24 Nov 2015
A -your cell array [3 x 3].
Z = cellfun(@(x)reshape(x,1,1,[]),A,'un',0);
out = cell2mat(Z);
  2 commentaires
Anton Filyayev
Anton Filyayev le 24 Nov 2015
Modifié(e) : Anton Filyayev le 24 Nov 2015
This worked beautifully, thanks!!
Christopher Crawford
Christopher Crawford le 12 Jan 2020
Modifié(e) : Christopher Crawford le 12 Jan 2020
To do the same for a cell array A of arbitrary ndarrays, replace [] with size(x):
B=cell2mat(cellfun(@(x)reshape(x,[1,1,size(x)]),A,'un',0))
which creates an array 2 dimensions higer than that of the cells of A.
To only add one dimension for row or collumn cell arrays (and none for a singleton cell array):
C=reshape(B,[size(A)(size(A)~=1),size(A{1})])
or permute the ndarray dimensions ahead of the cell array dimensions:
C=permute(B,[3:ndims(B),1:2])

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by