mat2cell sizes
Afficher commentaires plus anciens
Within a function, I convert a cell array C_in to a numeric array A_in:
A_in = cell2mat(C_in);
I then perform calculations on A_in that will result in A_out with the same size as A_in. In the end, I need to convert the numeric array A_out to a cell array C_out, with the sizes of C_out being exactly the same as C_in. I know that mat2cell is used for this, but I was wondering if there is a straight-forward way to have mat2cell figure out the row and column distances automatically based on C_in. C_in is expected to have a size of {[1, n1], [1, n2], [1, n3], ...} or {[n1, 1], [n2, 1], [n3, 1], ...}, and my function should produce a C_out with identical dimensions in both cases.
Réponses (1)
Walter Roberson
le 10 Nov 2017
cellsizes = cellfun(@size, C_in);
C_r = cellfun(@(M) M(1), cellsizes);
C_c = cellfun(@(M) M(2), cellsizes);
mat2cell(A_out, C_r, C_c)
3 commentaires
the cyclist
le 10 Nov 2017
This solution did not work for me:
C_in = {[1 2],[1 2 3]};
A_in = 2 * cell2mat(C_in);
A_out = 2*A_in;
cellsizes = cellfun(@size, C_in,'UniformOutput',false); % Had to add the additional arguments due to non-scalar output.
C_r = cellfun(@(M) M(1), cellsizes);
C_c = cellfun(@(M) M(2), cellsizes);
mat2cell(A_out, C_r, C_c)
The last line gives the error
Input arguments, D1 through D2, must sum to each dimension of the input matrix size, [1 5].
That line is actually trying to create a cell array of dimensions {[1 2],[1 3];[1 2],[1 3]}.
I don't see a good fix right off the top of my head, so just posting my observation.
hmalissa
le 10 Nov 2017
Walter Roberson
le 10 Nov 2017
cellsizes = cellfun(@size, C_in, 'Uniform', 0);
if size(A_in,2) == 1
C_r = cellfun(@(M) M(1), cellsizes);
C_c = 1;
else
C_r = 1;
C_c = cellfun(@(M) M(2), cellsizes);
end
C_out = mat2cell(A_out, C_r, C_c);
Catégories
En savoir plus sur Data Type Conversion dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!