Python快速获取单个numpy数组

时间:2018-04-21 21:04:41

标签: python arrays python-2.7 numpy

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

现在,我用numpy.loadtxt()读入循环中的每个文件,然后连接生成的数组。假设数据由3列组成,并存储在两个文件中#34; 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中完成。

首先在所有数据中读取另一个想法,分别存储每个读入,并最终将它们连接起来。 (或者,因为这必须给我总行数,分配一个适合所有数据的行,然后在那里复制数据。)

有没有人对哪种方法最有效?

1 个答案:

答案 0 :(得分:5)

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

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

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