1

我必须将一个非常大(170 万条记录)的 csv 文件读取到一个 numpy 记录数组中。其中两列是需要转换为日期时间对象的字符串。此外,一列需要是这些日期时间之间的计算差异。

目前,我制作了一个自定义迭代器类,用于构建列表列表。然后我使用 np.rec.fromrecords 将其转换为数组。

但是,我注意到多次调用 datetime.strptime() 确实会减慢速度。我想知道是否有更有效的方法来进行这些转换。时间在日期范围内精确到秒。因此,假设时间是均匀分布的(它们不是),似乎我正在做 20 倍以上的必要转换(170 万/(60 X 60 X 24)。

将转换后的值存储在字典 {string dates: datetime obj} 中并在进行不必要的转换之前首先检查字典会更快吗?

或者我应该使用 numpy 函数(我还是 numpy 库的新手)?

4

1 回答 1

0

我可能是错的,但在我看来,您的问题是重复出现,因此进行相同转换的次数超过了必要的次数。 如果这种解释是正确的,最有效的方法将取决于有多少重复。如果您在 170 万次中有 100,000 次重复,那么将 160 万次写入字典并检查 170 万次可能不会更有效,因为它执行 1.6+170 万次读取/写入。但是,如果您有 100 万次重复,那么为那些返回答案 (O(1)) 而不是额外进行一百万次转换会快得多。

总而言之,python 非常慢,鉴于您使用了 170 万个输入,您可能根本无法加快速度。至于numpy函数,我也不是很精通,但我相信网上有一些很好的文档。

于 2012-07-20T18:54:54.477 回答