提高速度numpy.loadtxt?

时间:2019-03-01 16:10:20

标签: python python-3.x numpy

我有数十万个数据文本文件要读取。到目前为止,每次运行代码时,我都会从文本文件中导入数据。也许简单的解决方案是将数据重新格式化为更快读取的文件。 无论如何,现在我拥有的每个文本文件如下:

User: unknown
Title : OE1_CHANNEL1_20181204_103805_01
Sample data     
Wavelength  OE1_CHANNEL1    
185.000000  27.291955

186.000000  27.000877

187.000000  25.792290

188.000000  25.205620

189.000000  24.711882

.
.
.

我读取和导入txt文件的代码是:

# IMPORT DATA
path = 'T2'
if len(sys.argv) == 2:
    path = sys.argv[1]

files = os.listdir(path)
trans_import = []
for index, item in enumerate(files):
    trans_import.append(np.loadtxt(path+'/'+files[1], dtype=float, skiprows=4, usecols=(0,1)))

结果数组在变量浏览器中的外观为: {ndarray} = [[185。 27.291955] \ n [186。 27.000877] \ n ...]

我想知道,如何才能加快这一步?到目前为止,导入〜4k文本文件需要花费一些时间。每个文本文件(频谱)中有841行。通过此代码获得的输出为841 * 2 =1682。显然,它将\ n视为一行...

2 个答案:

答案 0 :(得分:1)

如果有一个大文件而不是许多小文件,则可能会更快。通常这更有效。另外,您可能会从直接保存numpy数组并加载该.npy文件而不是读取大文本文件中而获得加速。不过我不确定最后一部分。与往常一样,当需要时间时,我会尝试这两个选项,然后评估性能提高。

如果由于某种原因您确实不能只拥有一个大文本文件/ .npy文件,则还可以通过使用multiprocessing来让多个工作人员阅读文件在同一时间。然后,您可以在最后将矩阵连接在一起。


这不是您的主要问题,但由于这似乎是一个问题-您可以重写文本文件以使它们没有多余的换行符,但我认为np.loadtxt不能忽略它们。不过,如果您愿意使用pandas,那么将pandas.read_csvskip_blank_lines=True一起使用将为您解决。要从numpy.ndarray获取pandas.DataFrame,只需执行dataframe.values

答案 1 :(得分:0)

让我们使用pandas.read_csv(具有C速度)而不是numpy.loadtxt。这是一个非常有帮助的帖子: http://akuederle.com/stop-using-numpy-loadtxt