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