【问题标题】:Python quick data read-in and slicePython快速数据读入和切片
【发布时间】:2017-04-12 12:21:35
【问题描述】:

我在 python 中有以下代码,我想我需要一些帮助来优化它。
我正在读取几百万行数据,但如果每行一个坐标不符合我的标准,则将它们中的大部分丢弃。
代码如下:

def loadFargoData(dataname, thlimit):
    temp = np.loadtxt(dataname)
    return temp[ np.abs(temp[:,1]) < thlimit ]

我已经将它编码为 C 类型代码,当然现在在 python 中这非常慢。
我可以以某种方式扔掉我的临时对象吗?或者 Pythonian 群体可以帮助我进行哪些其他优化?

【问题讨论】:

  • 可能是这个问题的重复:stackoverflow.com/questions/14645789/…
  • @Zefick:感谢您的链接。确实,如果可以构建模仿数学运算(如 \ge...)的正则表达式,那将解决我的问题。这可能吗?

标签: python arrays optimization


【解决方案1】:

pandas 中包含的数据阅读器可能会加快您的脚本速度。它的读取速度比 numpy 快。 Pandas 将生成一个数据框对象,易于查看为 numpy 数组(如果愿意,也易于转换),因此您可以在 numpy 中执行您的条件(在您的问题中看起来足够高效)。

import pandas as pd

def loadFargoData(dataname, thlimit):
    temp = pd.read_csv(dataname)  # returns a dataframe
    temp = temp.values            # returns a numpy array
    # the 2 lines above can be replaced by   temp = pd.read_csv(dataname).values
    return temp[ np.abs(temp[:,1]) < thlimit ]

您可能需要查看 Pandas 的文档以了解正确读取文件可能需要的函数参数(标题、分隔符等)。

【讨论】:

  • 很抱歉迟到了你的回答,我正忙于另一个项目。 Pandas 阅读器实际上效果很好,我的数据速度提高了 15-16 倍。
猜你喜欢
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多