Arrays 串联字符串&&;整数作为双类型数组变量-MATLAB

Arrays 串联字符串&&;整数作为双类型数组变量-MATLAB,arrays,matlab,vector,concatenation,string-concatenation,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 正确连接数字(由变量k反映)和字符串名称“yr”的。但是,语法在分配实例时失败(在第一次迭代期间) 由

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

[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
正确连接数字(由变量k反映)和字符串名称“yr”的。但是,语法在分配实例时失败(在第一次迭代期间)

由此产生的错误本身就是明证

但我还在想办法。因此,任何反馈都将不胜感激


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

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

然后,每个人都强烈反对你试图做的事情,包括。最好使用单元格
yr
并调用
yr{k}
而不是迭代变量名:

yr = cell(j,1);
for k = 2:j
    yr{k-1} = cell2mat(fimat(:,k));
end
无论如何,如果你仍然想这样做,你可以使用


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

yr{k-1}=cell2mat(fimat(:,k))
如果必须使用带数字的变量名(我强烈建议不要这样做),则必须对行使用
eval
。我强烈建议在使用
eval
之前检查的备选方案是带有动态字段名和
容器的
struct
。映射

以下是我对问题的答案,仅供分享。希望这将有助于并感谢这篇文章的贡献者

[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

感谢您的建议,尽管它不能根据经验解决所述的
错误:用于多个LHS分配的数组不能包含LEX_TS_STRING
。这两个建议似乎都不起作用。此外,我还稍微修改了你的语法。1/使用
eval
而K“似乎不起作用”是什么意思?你有错误信息吗?通过“似乎不起作用”,我想说“不起作用”,感谢你的帮助。1/
eval
帖子中的错误(严格意义上)=
错误:输入字符在MATLAB语句或表达式中无效。来自我的(稍作修改):
在作业A(I)=B中,B和I中的元素数量必须相同。
干杯。这2个问题与
yr{k-1}=cell2mat(fimat(:,k))
有关,尽管这个想法在理论上看起来是可以接受的:1/
yr
是单元类型,而不是双重类型的变量。推论它是空的,因为它不能用双类型的
cell2mat(fimat(:,k))
喂养。我尝试了
cell2mat(yr{k-1})=cell2mat(fimat(:,k))
作为确保类型唯一性的方法,但最终会出现维度问题。此外,
cell2mat(i,yr{k-1})=cell2mat(fimat(:,k))
作为试验也没有进一步的改进。无论如何,谢谢。你必须使用
yr{k-1}
而不是
yr
,这是你的替身。它已经完成并重复了,但仍然像前面解释的那样,不幸的是。我不明白你试图用作业左侧的
cell2mat
实现什么。出于分享的目的,请看下面的代码,因为我昨天最终制定了解决方案,详细说明了我的期望。我很感谢你在这个职位上的贡献。干杯
yr = cell(j,1);
for k = 2:j
    yr{k-1} = cell2mat(fimat(:,k));
end
while k<=j
    eval(['_' num2str(k-1) 'yr = cell2mat(fimat(:,k));']);
    k=k+1;
end
yr{k-1}=cell2mat(fimat(:,k))
[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