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

标签 python loops multidimensional-array tuples

我想为神经网络组装一个训练集。我有一个很大的 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/

相关文章:

python - 我需要在 Mongo 中重新实现身份验证吗?

c - 预处理器跳过 C 中的部分代码

Python 嵌套 for 循环用于创建 Excel 工作表

java - 数组数组与多维数组的性能比较

c++ - 如何在 C++ 中使用数组?

python - 使用无服务器框架将 API 添加到使用计划

python - 一对多关系Django

python - ImportError : cannot import name GstRtspServer, 未找到内省(introspection)类型库

php - 多维数组的递归循环?

php - 在变量 php 中有两个数组