gpt4 book ai didi

python - python 中的元组大小有限制吗?

转载 作者:行者123 更新时间:2023-12-01 04:21:29 25 4
gpt4 key购买 nike

我想为神经网络组装一个训练集。我有一个很大的 csv 文件,有 1017209 行和 7 列。我需要从这个文件中提取某些特征,并将它们放入一个元组中。我按照以下方式进行:

import pandas as pd

data = pd.read_csv('data.csv', index_col=False, header=0)
matrix = data.as_matrix()

training_data = ()

for x in range(1017209):
a = np.ndarray((3,1), buffer=np.array([matrix[x][0],matrix[x][1],matrix[x][5]]), dtype=float)
b = np.ndarray((1,1), buffer=np.array(matrix[x][3]), dtype=float)
training_data = training_data + ((a,b),)

当我循环大约 100000 次时它就起作用了:

for x in range(100000)

但不是全套:

for x in range(1017209)

我在spyder中运行它。它没有破裂,但似乎也没有完成。当我设置为 100000 时,它会在大约一分钟内完成。当我设置为 1017209 时,即使在 45 分钟内也无法完成。

可能会发生什么?为什么我没有收到错误消息?有没有更好的方法来创建相同的元组?

最佳答案

我认为 C32 解决了这个问题(尽管他出于某种原因在评论中回答了这个问题)。由于元组是不可变的,因此您必须每次创建一个新元组,而不是附加到现有元组。这会给你带来二次方的行为,如果你让你的元组长 10 倍,那么需要的时间就会增加 100 倍。您的代码可能会在大约 100 分钟左右完成。例如:

def build_tup(n):
td = ()
for i in range(n):
td = td + ((1,2),)
return td

def add_to_list(n):
td = []
for i in range(n):
td += (1,2),
return td

build_tup提供二次行为:

>>> %timeit build_tup(100)
10000 loops, best of 3: 21.7 µs per loop
>>> %timeit build_tup(1000)
1000 loops, best of 3: 1.7 ms per loop
>>> %timeit build_tup(10000)
10 loops, best of 3: 165 ms per loop

add_to_list 的有效线性行为:

>>> %timeit add_to_list(100)
100000 loops, best of 3: 3.64 µs per loop
>>> %timeit add_to_list(1000)
10000 loops, best of 3: 35 µs per loop
>>> %timeit add_to_list(10000)
The slowest run took 4.96 times longer than the fastest. This could mean that an intermediate result is being cached
1000 loops, best of 3: 348 µs per loop

关于python - python 中的元组大小有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33634310/

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