Creating a 3-dim matrix from an array and a 2-dim matrices array

I am trying to create a 3-dimensional matrix (e.g. 80 x 300 x 350) from an array (dim 80) and an array of 80 300 x 350 matrices. The second dimension in matrices may vary, so it needs to be padded by 0.
Any hint is welcome.
I have tried this:
for i=1:80
res(i,:,:)=cell2mat(s1(i));
end
and got this:
Subscripted assignment dimension mismatch.
Thank you

2 commentaires

If you are using the 300 x 350 slices downstream in your code, you might consider making those the first two dimensions of your 3D matrix so the slices are contiguous in memory. E.g., a 300 x 350 x 80 array.
thanks for the hint, James, might be useful in the future

Connectez-vous pour commenter.

 Réponse acceptée

Close! but using :,: means that it must fill the whole thing, not pad with zeros. Instead, only fill to the size:
for i=1:80
sii = cell2mat(s1(i));
res(i,1:size(sii,1),1:size(sii,2)) = permute(sii,[3 1 2]); % permute to write orientation
end

1 commentaire

Thank you, that looks like shorter solution. In a meanwhile, I have tried more direct approach, using the coder logic, I guess.
%zero 3D matrix, placeholder predict=zeros(80, 300, 350);
for i=1:80 temp=cell2mat(s1(i)); dims=size(temp); d=dims(2); for j=1:300 for k=1:d predict(i,j,k)=temp(j,k); end end end
and it works well enough.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by