gpt4 book ai didi

python - 如何有效地组合多个numpy数组?

转载 作者:行者123 更新时间:2023-12-01 00:32:18 24 4
gpt4 key购买 nike

我在尝试加载 18k 训练数据以进行 tensorflow 训练时遇到困难。这些文件是 npy 文件,命名如下:0.npy、1.npy...18000.npy。

我在网上浏览了一下,想出了一个简单的代码,首先以正确的顺序读取文件,并尝试将训练数据连接在一起,但这需要很长时间..

import numpy as np
import glob
import re
import tensorflow as tf

print("TensorFlow version: {}".format(tf.__version__))

files = glob.glob('D:/project/train/*.npy')
files.sort(key=lambda var:[int(x) if x.isdigit() else x for x in
re.findall(r'[^0-9]|[0-9]+', var)])
# print(files)

final_dataset = []
i = 0
for file in files:
dataset = np.load(file, mmap_mode='r')
print(i)
#print("Size of dataset: {} ".format(dataset.shape))
if (i==0):
final_dataset = dataset
else:
final_dataset = np.concatenate((final_dataset, dataset), axis = 0)
i = i + 1

print("Size of final_dataset: {} ".format(final_dataset.shape))
np.save('combined_train.npy', final_dataset)

最佳答案

以任何方式“组合”数组都涉及 (1),使用两个数组的总大小创建一个数组; (2)、将其内容复制到数组中。如果每次加载数组时都执行此操作,则会重复 18000 次 - 每次迭代的时间都在增长(由于 final_dataset 较大)。

一个简单的解决方法是将数组附加到一个列表中 - 然后在最后将它们全部一次组合起来:

dataset = []
for file in files:
data = np.load(file, mmap_mode='r')
dataset.append(data)

final_dataset = np.concatenate(dataset, axis=0)

但是要注意:确保final_dataset确实适合您的RAM,否则程序将崩溃。您可以通过ram_required = size_per_file * number_of_files找到。相关SO 。 (为了进一步加快速度,您可以查看 multiprocessing - 但开始工作并不容易)

关于python - 如何有效地组合多个numpy数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58089499/

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