连接字符串&&整数作为double类型的数组变量 - MATLAB

时间:2015-08-19 06:43:09

标签: arrays matlab vector concatenation string-concatenation

我目前正在寻找下面一段代码的建议,该代码由有效地循环遍历数据集(的单元格类型)并将每列提取为数据向量。

[i,j]=size(fimat);
k=2;
while k<=j % looping through columns
[num2str(k-1),'yr']=cell2mat(fimat(:,k)); %extract each column as vector
k=k+1;
end

无可否认,我的问题在于以下陈述:

[num2str(k-1),'yr']

正确连接数字(由变量k 反映)和字符串名称&#39; yr &#39;。但是,语法在分配实例(在第一次迭代期间)

时失败
1yr=cell2mat(fimat(:,2))

产生的错误自言自语

Error: An array for multiple LHS assignment cannot contain LEX_TS_STRING.

但我仍然想办法做到这一点。因此,任何反馈都将受到赞赏。

由于

3 个答案:

答案 0 :(得分:2)

首先,在matlab中,变量名不能以数字开头。您应该修改代码,使变量名以字母或下划线开头。

例如['yr' num2str(k-1)]['_' num2str(k-1) 'yr']会更好。

然后,包括The Mathworks在内的所有人都非常强烈反对你要做的事情。使用单元格yr并调用yr{k}而不是迭代变量名称会好得多:

yr = cell(j,1);
for k = 2:j
    yr{k-1} = cell2mat(fimat(:,k));
end

无论如何,如果您仍想这样做,可以使用eval

while k<=j
    eval(['_' num2str(k-1) 'yr = cell2mat(fimat(:,k));']);
    k=k+1;
end

最佳,

答案 1 :(得分:1)

您无法像以前那样动态创建变量名称。 =的左侧必须是标识符,而不是char。我建议的替代方法是使用单元格数组而不是单个变量名。例如:

yr{k-1}=cell2mat(fimat(:,k))

如果您必须将变量名称与数字一起使用,我强烈建议您不要这样做,您必须使用eval作为该行。我强烈建议您在使用eval之前检查的替代方案是struct,其中包含动态字段名称和containers.Map

答案 2 :(得分:0)

以下是我对问题回答,以便进行分享。希望它会有所帮助,并感谢这篇文章的贡献者。

[i,j]=size(fimat); %get dimension of dataset (of cell type)
numdata=cell2mat(fimat(1:i,2:j)); %extract only numeric from dataset
for k=1:j-1
eval(sprintf('yr%d = numdata(:,k)', k));
end