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

Concatenate string && integer as array variable of double type - MATLAB

我目前正在寻找有关以下代码的建议,其中包括高效循环遍历数据集(细胞类型)并将每一列提取为数据向量。

[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 反映)和字符串名称“yr”。但是,语法无法分配实例 (在第一次迭代期间)

1yr=cell2mat(fimat(:,2))

由此产生的错误自言自语

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

但我仍在想办法做到这一点。因此,我们将不胜感激任何反馈。

谢谢

首先,在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

最佳,

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

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

如果你必须使用带数字的变量名,我强烈建议不要这样做,你必须使用 eval 作为行。我强烈建议在使用 eval 之前检查的替代方案是带有动态字段名称的 structcontainers.Map

这是我对问题回答,以供分享。希望它能有所帮助并感谢此 post.

的贡献者
[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