Info
이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.
How to create doubles from cell arrays?
조회 수: 1 (최근 30일)
이전 댓글 표시
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!
댓글 수: 0
답변 (1개)
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
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!