连接字符串 && 整数作为双精度类型的数组变量 - 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
之前检查的替代方案是带有动态字段名称的 struct
和 containers.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
我目前正在寻找有关以下代码的建议,其中包括高效循环遍历数据集(细胞类型)并将每一列提取为数据向量。
[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
之前检查的替代方案是带有动态字段名称的 struct
和 containers.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