问题
我要导入CSV文件,混合数据类型的数字和变量/符号。 进口部分已经讨论与混合数据类型导入CSV文件 。
描述
这里的CSV文件只包含2×2的公式(但一般64×64,我评价它1'000'000倍)。 我面临的问题是细胞的评价。 这不能以同样的方式来完成。
在MATLAB代码是一样的东西
% Parameter initialization
vector1 = ones(1e6);
a=1;
b=2;
c=3;
d=4;
% Formula calculation
vector2(1)=import('input000001.csv');
在我的最小输入文件input000001.csv
包含一些公式,作为例如:
a*vector1(1),2*vector1(1)/b
c+vector1(1),3*vector1(1)^d
尝试这个
[a b c d] = deal(1,2,3,4);
data = strcat(importdata('input.csv', sprintf('\n')), ';');
Matrix = eval(['[' data{:} '[]]']);
编辑:要通过避免放缓eval
你可以写在另一间文件中的字符串,并在循环,而不是调用它。 事情是这样的:
[a b c d] = deal(1,2,3,4);
matDef = regexprep(fileread('input.csv'), {'(\r\n|\r|\n)' ';^'}, {';' ''});
f = fopen('inputMatrix.m', 'w');
fwrite(f, ['Matrix = [' matDef '];'])
fclose(f);
rehash
for k=1:100000,
inputMatrix
end
你需要的rehash
问MATLAB到新创建的添加inputMatrix
到的已知功能列表。
一些提示后,我实现恢复过来用以下解决方案。
%% Initialization
a=1;
b=2;
c=3;
d=4;
%% Procedure for input and evaluation
Temp = cell(read_mixed_csv('input.csv',','));
[imax,jmax]=size(Temp);
Matrix = zeros(imax,jmax);
for i = (1:imax)
for j = (1:jmax)
Matrix(i,j) = eval(Temp{i,j});
end
end
其中read_mixed_csv('input.csv',',')
是从导入CSV与混合数据类型的文件 。
我打开更好的答案!