【问题标题】:Python fast way to get data from multiple files in single numpy arrayPython从单个numpy数组中的多个文件中获取数据的快速方法
【发布时间】:2018-10-02 06:23:22
【问题描述】:

我需要读取存储在许多相同格式但长度不同的文件中的数据,即相同的列,但不同的行数。此外,我需要将每一列数据存储在一个数组中(最好是一个 numpy 数组,但也可以使用列表)。

现在,我使用numpy.loadtxt() 在循环中读取每个文件,然后连接生成的数组。假设数据由 3 列组成,并存储在“foo”和“bar”两个文件中:

import numpy as np
filenames = ["foo", "bar"]
col1_all = 0  #data will be stored in these 3 arrays
col2_all = 0
col3_all = 0
for f in filename:
    col1, col2, col3 = np.loadtxt(f, unpack=True)
    if col1.shape[0] > 0: # I can't guarantee file won't be empty
        if type(col1_all) == int:
            # if there is no data read in yet, just copy arrays
            col1_all = col1[:]
            col2_all = col2[:]
            col3_all = col3[:]
        else:
            col1_all = np.concatenate((col1_all, col1))
            col2_all = np.concatenate((col2_all, col2))
            col3_all = np.concatenate((col3_all, col3))

我的问题是:有没有更好/更快的方法来做到这一点?我需要尽可能快,因为我需要读取数百个文件。

例如,我可以想象,首先找出我总共将拥有多少行并“分配”一个足够大的数组以首先容纳所有数据,然后复制该数组中的读入数据可能表现更好,因为我绕过了串联。我不知道总行数,所以这也必须在 python 中完成。

另一个想法是先读入所有数据,分别存储每个读入的数据,最后将它们连接起来。 (或者,因为这基本上给了我总行数,分配一个适合所有数据的行,然后将数据复制到那里)。

有没有人知道什么是最有效的?

【问题讨论】:

  • 作为一般规则,在进行过程中连接是最慢的,因为它每次都会创建一个新数组。追加到列表相对较快,因为列表只是收集指针。插入预分配的数组也很好。

标签: python arrays python-2.7 numpy


【解决方案1】:

不要将每个文件与其余文件连接起来,读取列表中的所有内容,并最终构建结果

import numpy as np
filenames = ["foo", "bar"]
data = np.concatenate([np.loadtxt(f) for f in filenames])

如果您愿意,可以将data 拆分成列,但大多数情况下,这不是一个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多