How can I convert cell array to an arrary matrix?

 Risposta accettata

in = load('cell_array.mat')
in = struct with fields:
ans: {[4×1 double] [15] [2×1 double] [4] [18] [16] [3] [2×1 double] [14] [2×1 double] [3×1 double] [17]}
x = in.ans;
out = vertcat(x{:}).'
out = 1×20
6 11 20 2 15 19 12 4 18 16 3 13 1 14 7 8 5 10 9 17

3 Commenti

On a side note, you should not use "ans" as a variable, as it can cause confusion and bugs/issues.
You're welcome!

Accedi per commentare.

Più risposte (2)

This is how it can be attained:
A = load('cell_array.mat').ans;
for ii = 1:numel(A)
H = A{ii};
K{ii} = cat(1, H(:)');
end
array_matrix = (horzcat(K{:}))
array_matrix = 1×20
6 11 20 2 15 19 12 4 18 16 3 13 1 14 7 8 5 10 9 17

3 Commenti

x = load('cell_array.mat').ans;
Sulaymon Eshkabilov thank you for your response.
The code above is not work. It gives this error:
Undefined variable "load" or class "load".
Error in Untitled (line 8)
x = load('cell_array.mat').ans;
Thanks again.
temp = load('cell_array.mat');
A = temp.ans;
Thank you Walter. It work now.

Accedi per commentare.

Voss
Voss il 7 Gen 2024
Modificato: Voss il 7 Gen 2024
@Abdullah Türk: If you know that all the cells of your cell array contain column vectors of the same class (as is the case in the variable ans in the posted mat file), then @Dyuman Joshi's approach will work:
x = load('cell_array.mat').ans;
out = vertcat(x{:}).'
out = 1×20
6 11 20 2 15 19 12 4 18 16 3 13 1 14 7 8 5 10 9 17
Alternatively, if the cells can contain arrays of any shape and dimensionality (still of the same class), then you'll need to reshape them before doing the vertical concatenation (vertcat). For example:
x = load('cell_array.mat').ans;
x_col = cellfun(@(m)reshape(m,[],1),x,'UniformOutput',false);
out = vertcat(x_col{:}).'
out = 1×20
6 11 20 2 15 19 12 4 18 16 3 13 1 14 7 8 5 10 9 17

1 Commento

Voss, thank you very much for your detailed information.
The following code is not work. I think this has something to do with the MATLAB version I use. I'm sure the code you wrote works, but I think it didn't work in my version.
x = load('cell_array.mat').ans;
Thanks a lot again.

Accedi per commentare.

Categorie

Scopri di più su Programming in Centro assistenza e File Exchange

Prodotti

Release

R2015a

Community Treasure Hunt

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

Start Hunting!

Translated by