我需要对大量数字执行一些计算。
array.array 或 numpy.array 是否比典型数组提供显着的性能提升?
我不需要对数组进行复杂的操作,我只需要能够访问和修改值,
例如
import numpy
x = numpy.array([0] * 1000000)
for i in range(1,len(x)):
x[i] = x[i-1] + i
所以我真的不需要连接、切片等。
此外,如果我尝试分配不适合 C long 的值,数组似乎会抛出错误:
import numpy
a = numpy.array([0])
a[0] += 1232234234234324353453453
print(a)
在控制台上我得到:
a[0] += 1232234234234324353453453
OverflowError: Python int too large to convert to C long
是否有数组的变体可以让我输入无限的 Python 整数? 还是那样做会剥夺数组的初衷?
最佳答案
您首先需要了解数组和列表之间的区别。
数组是由某种类型的元素(例如整数)组成的连续内存块。
数组一旦创建就无法更改其大小。
因此,数组中的每个整数元素都有一个固定大小,例如4 个字节。
另一方面,列表 只是地址 的“数组”(也具有固定大小)。
但随后每个元素 都在内存中保存着某些else 的地址,这是您要使用的实际整数。当然,这个整数的大小与数组的大小无关。因此,您始终可以创建一个新的(更大的)整数并“替换”旧的,而不会影响数组的大小,数组仅包含整数的地址。
当然,列表的这种便利是有代价的:对整数执行算术现在需要对数组的内存访问,加上对整数本身的内存访问,加上 分配更多内存所需的时间(如果需要),加上 删除旧整数所需的时间(如果需要)。所以是的,它可能会更慢,所以你必须小心处理数组中的每个整数。
关于Python numpy 数组与列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9220372/