gpt4 book ai didi

python - 我可以强制 python 数组元素具有特定大小吗?

转载 作者:太空狗 更新时间:2023-10-29 22:29:26 25 4
gpt4 key购买 nike

我正在使用数组模块来存储数量可观(许多千兆字节)的无符号 32 位整数。 python 没有为每个元素使用 4 个字节,而是使用 8 个字节,如 array.itemsize 所示,并由 pympler 验证。

例如:

>>> array("L", range(10)).itemsize
8

我有大量元素,所以将它们存储在 4 个字节以内对我有好处。

Numpy 将允许我将值存储为无符号 32 位整数:

>>> np.array(range(10), dtype = np.uint32).itemsize
4

但问题是使用 numpy 的索引运算符的任何操作都大约慢两倍,因此 numpy 不支持的向量操作的操作速度很慢。例如:

python3 -m timeit -s "from array import array; a = array('L', range(1000))" "for i in range(len(a)): a[i]"
10000 loops, best of 3: 51.4 usec per loop

对比

python3 -m timeit -s "import numpy as np; a = np.array(range(1000), dtype = np.uint32)" "for i in range(len(a)): a[i]"
10000 loops, best of 3: 90.4 usec per loop

所以我被迫要么使用两倍于我想要的内存,要么程序运行速度比我想要的慢两倍。有没有解决的办法?我可以强制 python 数组使用指定的项目大小吗?

最佳答案

如果你想坚持使用数组set the typecode I (unsigned int) 而不是 L (unsigned long):

>>> array.array("I", range(10)).itemsize
4

也就是说,如果没有一种方法可以使您的计算速度比使用 numpy 损失的速度快 2 倍以上,我会感到非常惊讶。如果不知道您用这些值做了什么,很难说清楚。

关于python - 我可以强制 python 数组元素具有特定大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36832450/

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