在Matlab中将变量分配压缩到for循环中

时间:2019-02-01 18:46:14

标签: matlab

我想将我的部分代码压缩为for循环。代码如下:

dataMixSp1 = [dataSp1{1}; dataSp1{2}; dataSp1{3}; dataSp1{4};];
dataMixSp2 = [dataSp2{1}; dataSp2{2}; dataSp2{3}; dataSp2{4};];
dataMixSp3 = [dataSp3{1}; dataSp3{2}; dataSp3{3}; dataSp3{4};];
dataMixSp4 = [dataSp4{1}; dataSp4{2}; dataSp4{3}; dataSp4{4};];
dataMixSp5 = [dataSp5{1}; dataSp5{2}; dataSp5{3}; dataSp5{4};];
dataMixSp6 = [dataSp6{1}; dataSp6{2}; dataSp6{3}; dataSp6{4};];
dataMixSp7 = [dataSp7{1}; dataSp7{2}; dataSp7{3}; dataSp7{4};];
dataMixSp8 = [dataSp8{1}; dataSp8{2}; dataSp8{3}; dataSp8{4};];
dataMixSp9 = [dataSp9{1}; dataSp9{2}; dataSp9{3}; dataSp9{4};];
dataMixSp10 = [dataSp10{1}; dataSp10{2}; dataSp10{3}; dataSp10{4};];

问题是我不知道如何在for循环内动态创建变量。

我尝试了此方法,但是它不起作用:

a = 'dataMixSp';
for idx = 1:10
    [a num2str(idx)] = [['dataSp', num2str(idx), '{1}']; ['dataSp' num2str(idx) '{2}']; ['dataSp' num2str(idx) '{3}']; ['dataSp' num2str(idx) '{4}']; ];
end

2 个答案:

答案 0 :(得分:0)

要让Matlab对字符串中的指令进行评估,请使用eval函数。对于您显示的问题,可以这样执行: root ='dataMix'; part ='dataSp'; 对于k = 1:10     目标= sprintf('%s%d',root,k); %创建字符串'dataMix1','dataMix2',...     thisPart = sprintf('%s%d',part,k); %创建字符串'dataSp1,'dataSp2',...     rhs ='['; %作业右侧的打开     对于n = 1:4         rhs = sprintf('%s%s {%d};',rhs,thisPart,n);%附加'dataSp1 {1},dataSp1 {2} ...     结束     rhs = strcat(rhs(1:end-1),']');%关闭右侧     %注意(1:end-1)删除';'在最后一个变量和']'之间     指令= sprintf('%s =%s;',target,rhs); %创建一个Matlab指令     eval(指令)%让Matlab评估指令 结束 虽然,正如@tryman所说,有时该问题更容易解决以其他方式保存数据的问题。 希望这可以帮助 江淮汽车

答案 1 :(得分:0)

for idx = 1:10
    eval( [  'dataMixSp' num2str(idx) '= [ dataSp' num2str(idx), '{1}; dataSp' num2str(idx) '{2}; dataSp' num2str(idx) '{3}; dataSp' num2str(idx) '{4} ];' ] )
end

将执行以下代码:

dataMixSp1= [ dataSp1{1}; dataSp1{2}; dataSp1{3}; dataSp1{4} ];
dataMixSp2= [ dataSp2{1}; dataSp2{2}; dataSp2{3}; dataSp2{4} ];
dataMixSp3= [ dataSp3{1}; dataSp3{2}; dataSp3{3}; dataSp3{4} ];
dataMixSp4= [ dataSp4{1}; dataSp4{2}; dataSp4{3}; dataSp4{4} ];
dataMixSp5= [ dataSp5{1}; dataSp5{2}; dataSp5{3}; dataSp5{4} ];
dataMixSp6= [ dataSp6{1}; dataSp6{2}; dataSp6{3}; dataSp6{4} ];
dataMixSp7= [ dataSp7{1}; dataSp7{2}; dataSp7{3}; dataSp7{4} ];
dataMixSp8= [ dataSp8{1}; dataSp8{2}; dataSp8{3}; dataSp8{4} ];
dataMixSp9= [ dataSp9{1}; dataSp9{2}; dataSp9{3}; dataSp9{4} ];
dataMixSp10= [ dataSp10{1}; dataSp10{2}; dataSp10{3}; dataSp10{4} ];

亚诺(Arno)