strcmp文件 - 非常大的文件大小输出

时间:2014-04-15 20:30:54

标签: matlab strcmp

我正在阅读大约80MB的{csv文件 - data_O3。它的大小约为250,000 x 5。我创建了E,它有点大,因为它有所有的日子(data_O3在某些日子里丢失了)。我想比较两者,以便如果日期(保存在变量d3)和siteID(d4)相同,则数据点(第5列)将放在E中。

for j = 1:size(data_O3,1) 
    E(strcmp(d3,data_O3{j,3})&d4 == data_O3{j,4},5) = data_O3(j,5);
end

此脚本运行正常,但由于某些原因,运行它需要比预期更长的时间。我为其他数据运行相同的代码,这些数据只是略小而没有问题。这是strcmp代码或其他问题吗?

可以在此处找到使用的脚本和文件:https://www.dropbox.com/sh/7bzq3m1ixfeuhu6/i4oOvxHPkn

1 个答案:

答案 0 :(得分:0)

肯定会有很多方法可以显着提高速度。

首先,以数字形式读入所有数字数据。 Matlab没有针对字符串进行优化,甚至通常应尽可能避免使用单元格。如果要将所有内容保存为字符串,请使用其他语言(python或perl)

一旦您将州,县和站点作为数字读入,然后为siteID创建一个数字而不是字符串。一种方法是使用公式:

siteID = siteNum + 1e4*countyCode + 1e7*stateCode

这将为所有网站生成唯一的siteID。

使用datenum将日期字段转换为数字。

您现在处于第79行定义的data_O3可以是纯数字数组(无单元格!)的位置,您的E矩阵也可以。仅这一点就会使这个过程快许多倍。

您也可能希望将E定义为除NaN之外的其他内容。也许给它值-1。

您可以在比较中进行更多优化,但首先执行上述操作,我希望您会看到很大的改进。