我有一个36 x 2的矩阵,但是我想分离这些元素,从上到下给我18个2 x 2矩阵。例如。如果我有一个矩阵:
1 2
3 4
5 6
7 8
9 10
11 12
13 14
... ...
我想把它分成单独的矩阵:
M1 = 1 2
3 4
M2 = 5 6
7 8
M3 = 9 10
11 12
...等。
答案 0 :(得分:3)
以下示例代码可能很有用:
a=rand(36,2);
b=reshape(a,2,2,18)
然后使用b的第3个索引,您可以访问18个2x2矩阵,例如。 b(:,:,2)给出第二个2x2矩阵。
答案 1 :(得分:2)
我认为你问题的直接答案是:
sampledata = [...
0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18; ...
0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.35 1.36];
for ix = 1:(size(sampledata,2)/2)
assignin('base',['M' sprintf('%02d',ix)], sampledata(:,ix*2+[-1 0]))
end
这创建了18个变量,名为“M01”到“M18”,带有sampledata
矩阵的片段。
但是,请不要使用这样的动态变量名。它会使它触及的每一段代码复杂化。使用单元阵列,3D阵列(由@Johannes_Endres +1 BTW建议)或结构。任何不需要你以后写这样的东西的东西:
%PLEASE DO NOT USE THIS
%ALSO DO NOT BACK YOURSELF INTO A CORNER WHERE YOU HAVE TO DO IT IN THE FUTURE
varNames = who('M*');
for ix = 1:length(varNames )
str = ['result(' num2str(ix) ') = some_function(' varNames {ix} ');'];
eval(str);
end
我见过这样的代码,维护缓慢而且非常麻烦,更不用说内部美容仪的头痛和疼痛了。
答案 2 :(得分:0)
x = reshape(1:36*2,[2 36])'
k = 1
for i = 1:2:35
eval(sprintf('M%d = x(%d:%d,:);',k,i,i+1));
k = k+1;
end