Python numpy 数组与列表

标签 python arrays list numpy

我需要对大量数字执行一些计算。

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/

相关文章:

python - 在python中获取具有相同值的所有行?

c# - C#中套接字的列表或ArrayList

c# - 使用 List.Sort(Comparison<T> comparison) 在 C# 中对列表进行排序

list - 构建混合列表

python - 来自 Pylint 的 "No name in module"错误

python - python中不可预测的输出二叉搜索树

python - Django Formset 缺少管理表单数据

javascript - 在 Javascript 数组中搜索字符串匹配并输出内容

Javascript 数组和 innerHTML

python - 如何在 Windows 上运行介子构建系统?