从元胞数组中获取字符串作为 matlab 工作区中变量的名称

2023-12-19

我的实验中有大量 .csv 文件(200 多个),之前我一直在单独读取它们,对于数据处理的后续步骤来说,这是一项乏味的工作。

co_15 = csvread('CO_15K.csv',5,0);
co_25 = csvread('CO_25K.csv',5,0);
co2_15 = csvread('CO2_15K.csv',5,0);
co2_80 = csvread('CO2_80K.csv',5,0);
h2o_15 = csvread('H2O_15K.csv',1,0);
etc.....

所以我想在代码的开头创建一个像这样的单元格,然后创建一个自动读取它们的 for 循环。

input = {'co_15' 5;'co_25' 5;...
         'co2_15' 5; 'co2_80' 5;...
         'h2o_15' 1; 'h2o_140' 1;...
         'methanol_15' 5;'methanol_120' 5;'methanol_140' 5;...
         'ethanol_15' 5;'ethanol_80' 1;'ethanol_140' 5;...
         'co2_ethanol_15' 5 ;'co2_ethanol_80' 5;...
         'h2o_ethanol_15' 1 ;'h2o_ethanol_140' 1;...
         'methanol_ethanol_15' 5;'methanol_ethanol_120' 5;'methanol_ethanol_140' 5};

for n = 1:size(input,1)
    input{n,1} = csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
end

此代码中的单元格有 19 行 2 列,行是所有文件,列将包含处理数据的参数。现在我找不到解决方案的问题是我的第一列是一个字符串名称,我希望该字符串名称是 csvread 写入数据的变量的名称,但我现在设置它的方式只是覆盖包含 csv 数据的单元格第一列中的字符串。为了更加明确,我希望我的 matlab 工作区在包含 csv 文件数据的第一列中包含带有字符串名称的变量。我该如何解决这个问题?


你不actually想做这个。Even the http://www.mathworks.com/help/matlab/matlab_prog/string-evaluation.html#bs7kmd5数学工作坊会告诉 http://blogs.mathworks.com/loren/2006/01/04/more-in-eval/ you 不要这样做 http://www.mathworks.com/help/matlab/ref/eval.html?searchHighlight=eval#moreabout。如果您尝试使用变量名称来跟踪像这样的相关数据,那么有always更好的数据结构来保存您的数据。

一种方法是使用元胞数组

data = cell(size(input(:,1)));
for n = 1:size(input,1)
    data{n} = csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
end

另一个不错的选择是使用struct。你可以有一个struct具有与您的数据相对应的动态字段名称。

data = struct();
for n = 1:size(input,1)
    data.(input{n,1}) = csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
end

或者实际上创建一个结构数组并保存名称and结构中的数据。

for n = 1:size(input, 1)
    data(n).name = input{n,1};
    data(n).data =  csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
end

如果你绝对坚持这样做(再次强调,这非常重要)not推荐),那么你可以使用eval http://www.mathworks.com/help/matlab/ref/eval.html:

for n = 1:size(input, 1)
    data = csvread(strcat(input{n,1},'k.csv'),input{n,2},0);
    eval([input{n, 1}, '= data;']);
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从元胞数组中获取字符串作为 matlab 工作区中变量的名称 的相关文章

随机推荐