gpt4 book ai didi

Python快速从单个numpy数组中的多个文件获取数据的方法

转载 作者:行者123 更新时间:2023-11-28 21:37:15 24 4
gpt4 key购买 nike

我需要读取存储在许多格式相同但长度不同的文件中的数据,即相同的列,但行数不同。此外,我需要将每一列数据存储在一个数组中(最好是一个 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 中完成。

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

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

最佳答案

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

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

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

关于Python快速从单个numpy数组中的多个文件获取数据的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com