我正在尝试导入多个数据文件,分别称为1min1,1min2,1min3,1min4等。它们将进行一些处理(某些列的减法,某些值的乘法等),每个文件的最终结果是一列。我希望matlab将每个列保存在一个等于文件名的变量中。 因此,在多个文件1min1,1min2,1min3,1min4等中,输出几个具有相同名称的变量,但只有一个列/变量。
我尝试使用它:
i=20; %nr of files
name='1min'; %basic filename
norm=8; %normalisation factor
for k=1:i
fileName = strcat(name,num2str(k));
A= load(fileName);
[thisshouldbethesamefilename]=(A(:,7)-A(:,6))/A(1,12)*norm;
end
最后我想把它作为一个函数,我只输入文件名,文件的nr和规范化因子,它给我生成的列作为单独的变量。我知道我可以将所有列放在同一个文件中(例如使用B(:,1),B(:,2)等)但我想查看原始文件名,以便知道数据来自何处。 我尝试过genvarname,eval和类似的东西,但没有成功。可能很简单,感谢帮助!
答案 0 :(得分:2)
使用eval应该可以正常工作。试试这个:
temp =(A(:,7)-A(:,6))/A(1,12)*norm;
eval([ 'file_' name ' = temp;'])
请注意,这将在所有变量名称之前添加“file_”。这对您的任务很重要,因为您的文件名以数字开头(“1分钟”),它将不会被识别为有效的MATLAB变量。换句话说,如果你刚刚写完
1min = 12
...... MATLAB会抛出错误。
答案 1 :(得分:1)
我建议使用map container。
i=20; %nr of files
name='1min'; %basic filename
norm=8; %normalisation factor
map = containers.Map()
for k=1:i
fileName = strcat(name,num2str(k));
A= load(fileName);
map(fileName)=(A(:,7)-A(:,6))/A(1,12)*norm;
end
可以通过
读取数据map(fileName)