How to convert a cell array to a compatible matrix?

2 visualizzazioni (ultimi 30 giorni)
I have a cell array which is filled with matrices of varying size, could you help me to convert it to matrix with filling zeros at in between columns,
in this case the matrix size is ought ot be 41x 41 of double type.
  1 Commento
KSSV
KSSV il 16 Lug 2021
Fill the empty cells with appropriate zero matrices and use Cell2mat.

Accedi per commentare.

Risposta accettata

Jan
Jan il 16 Lug 2021
Modificato: Jan il 16 Lug 2021
CC = {rand(9,9), rand(5,4), rand(5,4), rand(6,4), rand(6,4), rand(8,4), rand(8,4), rand(9,4), rand(9, 4); ...
rand(4,5), rand(4,4), [], [], [], [], [], [], []; ...
[], [], rand(4,4), [], [], [], [], [], []; ...
rand(4,6), [], [], rand(4,4), [], [], [], [], []; ...
[], [], [], [], rand(4,4), [], [], [], []; ...
rand(4,6), [], [], [], [], rand(4,4), [], [], []; ...
[], [], [], [], [], [], rand(4,4), [], []; ...
rand(4,6), [], [], [], [], [], [], rand(4,4), []; ...
[], [], [], [], [], [], [], [], rand(4,4)};
C = CC;
S1 = cellfun('size', C, 1);
maxS1 = max(S1, [], 2);
S2 = cellfun('size', C, 2);
maxS2 = max(S2, [], 1);
for i2 = 1:size(C, 2)
for i1 = 1:size(C, 1)
X = C{i1, i2};
if size(X, 1) < maxS1(i1) || size(X, 2) < maxS2(i2)
X(maxS1(i1), maxS2(i2)) = 0;
C{i1, i2} = X;
end
end
end
Result = cell2mat(C);
Cheaper:
C = CC;
S1 = cellfun('size', C, 1);
maxS1 = max(S1, [], 2);
S2 = cellfun('size', C, 2);
maxS2 = max(S2, [], 1);
Result2 = zeros(sum(maxS1), sum(maxS2));
c1 = 1;
for i1 = 1:size(C, 1)
c2 = 1;
for i2 = 1:size(C, 2)
X = C{i1, i2};
Result2(c1:c1 + size(X,1) - 1, c2:c2 + size(X,2) - 1) = X;
c2 = c2 + maxS2(i2);
end
c1 = c1 + maxS1(i1);
end
isequal(Result, Result2)
ans = logical
1
It took some tome to create some test data as input. Please care for providing some code, which creates your input data, to make answering as easy as possible.
  3 Commenti

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Data Type Identification in Help Center e File Exchange

Prodotti


Release

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by