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

1 回表示 (過去 30 日間)
Valentina Baljak
Valentina Baljak 2015 年 4 月 22 日
コメント済み: Valentina Baljak 2015 年 4 月 22 日
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 件のコメント
James Tursa
James Tursa 2015 年 4 月 22 日
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.
Valentina Baljak
Valentina Baljak 2015 年 4 月 22 日
thanks for the hint, James, might be useful in the future

サインインしてコメントする。

採用された回答

Sean de Wolski
Sean de Wolski 2015 年 4 月 22 日
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 件のコメント
Valentina Baljak
Valentina Baljak 2015 年 4 月 22 日
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.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by