How can I concatenate the last matrices of a multiple-dimensional cell array iteratively?

1 次查看(过去 30 天)
In particular I want to add a new matrix (?x24) to an existing matrix (?x24) in every loop step, so that in the end there is one big matrix for each condition (1,2,3), which consists of all matrices of condition 4, i.e. X{1,2,3} = [M1{1,2,3,1}(:,1:24);M1{1,2,3,2}(:,1:24);M1{1,2,3,3}(:,1:24);....;M1{1,2,3,n}(:,1:24)] But how can be done this iteratively? This is what I have done already:
for Ind1 = 1:length(probanden)
for Ind2 = 1:length(ss)
for Ind3 = 1:length(bin)
for Ind4 = 1:length(reg)
allData{ind1,ind2,ind3} = [X{Ind1,Ind2,Ind3,Ind4}(:,1:24) Ind4]
end
end
end
end
Many thanks in advance! Lena
  1 个评论
Jan
Jan 2015-2-7
编辑:Jan 2015-2-7
I've edited the question to format the code. Please use the "{} Code" button to improve the readability. Thanks.
It is not clear, if the shown code solves your needs already. If not, what is missing? In the description you use "X" and "M1", but in the code we see "allData" and "X". This is confusing.

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2015-2-7
编辑:Stephen23 2015-2-7
If all of the arrays have the same number of columns, then you can do this without loops by concatenating them into one numeric array, and then splitting it apart again into a cell array. This is going to be a lot faster than concatenating the matrices in a loop. Here is an example of how to do this:
% Crate fake data, ?x2 numeric matrices in a 4D cell array:
M{1,1,1,1} = [1,2;3,4];
M{1,1,1,2} = [5,6;7,8;9,0];
M{1,1,2,1} = [Inf,NaN];
M{1,1,2,2} = [10,11;12,13;14,15];
M{1,2,1,1} = [20,21];
M{1,2,1,2} = [30,31;32,33;34,35];
M{1,2,2,1} = [40,41;42,43];
M{1,2,2,2} = [50,51;52,53;54,55;56,57];
M{2,1,1,1} = [100,101];
M{3,1,1,1} = [200,201];
% make dimension to be concatenated the first dimension:
M = permute(M,[4,1,2,3]);
% Get the matrix and cell array sizes:
X = size(M);
Y = sum(cellfun('size',M,1),1);
% Concatenate all matrices together:
Z = cat(1,M{:});
% Split this into a 3D cell array:
Z = reshape(mat2cell(Z,Y(:),size(M{1},2)),X(2:4));

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by