评估外部文件字符串中的变量

时间:2013-06-26 19:03:20

标签: matlab types import evaluation

问题

我想导入一个包含数字和变量/符号的混合数据类型的CSV文件。导入部分已在Import CSV file with mixed data types中讨论过。

描述

此处的CSV文件仅包含2x2公式(但一般为64x64,我将其评估为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

2 个答案:

答案 0 :(得分:1)

试试这个

[a b c d] = deal(1,2,3,4);

data = strcat(importdata('input.csv', sprintf('\n')), ';');
Matrix = eval(['[' data{:} '[]]']);

编辑:为避免eval减速,您可以将该字符串写入另一个m文件,然后在循环中调用它。像这样:

[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添加到已知函数列表中。

答案 1 :(得分:0)

经过一些提示后,我实现了以下解决方案。

%% 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',',')来自Import CSV file with mixed data types

我愿意接受更好的答案!