Info

この質問は閉じられています。 編集または回答するには再度開いてください。

How to create doubles from cell arrays?

1 回表示 (過去 30 日間)
gsourop
gsourop 2018 年 4 月 27 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
I would like to ask if there is a more efficient code to do the following task:
a = cell(10,1);
for i = 1 : 10
a{i,1} = randn(200,5);
end
for j =1:5
b{j} = [a{1,1}(:,j) a{2,1}(:,j) a{3,1}(:,j) a{4,1}(:,j) a{5,1}(:,j)];
end
Thank you!

回答 (1 件)

Guillaume
Guillaume 2018 年 4 月 27 日
編集済み: Guillaume 2018 年 4 月 27 日
if there is a more efficient code
Yes, don't use cell arrays!
a = randn(200, 5, 10);
your b{j} is simply
permute(a(:, j, :), [1 3 2])
%or
squeeze(a(:, j, :))
Even simpler, move the j to the third dimension
a = randn(200, 10, 5);
%b{j} would simply be a(:, :, j)
  2 件のコメント
gsourop
gsourop 2018 年 4 月 27 日
The initial matrices are of this form, I just use randn values in order to replicate the experiment. It is not that I am now starting the calculations. So I have to achieve result 'b' given the form of 'a'.
Guillaume
Guillaume 2018 年 4 月 27 日
Yes, I also used randn purely for demonstration.
Don't use cell arrays if you don't have to. It complicates everything. Since the matrices in your cell array are all the same concatenate them into a 3D matrix and use that from then on.
%a: a cell array of MxN matrices;
bettera = permute(cat(3, a{:}), [1 3 2])
From then on, whenever you wanted to use b{j}, use
bettera(:, :, j)
It is even possible that whatever you wanted to do with each b{j] could be done at once on bettera.

この質問は閉じられています。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by