mat*_*ots 11 python arrays numpy list
我需要对一大堆数字进行一些计算.
array.array或numpy.array是否比典型的数组提供显着的性能提升?
我不需要对数组进行复杂的操作,我只需要能够访问和修改值,
例如
import numpy
x = numpy.array([0] * 1000000)
for i in range(1,len(x)):
x[i] = x[i-1] + i
Run Code Online (Sandbox Code Playgroud)
所以我真的不需要连接,切片等.
此外,如果我尝试分配不适合C long的值,则看起来像数组会抛出错误:
import numpy
a = numpy.array([0])
a[0] += 1232234234234324353453453
print(a)
Run Code Online (Sandbox Code Playgroud)
在控制台我得到:
a[0] += 1232234234234324353453453
OverflowError: Python int too large to convert to C long
Run Code Online (Sandbox Code Playgroud)
是否有一个变量的数组让我放入无界的Python整数?或者这样做会在一开始就消除阵列的重点?
Meh*_*dad 12
首先需要了解数组和列表之间的区别.
数组是由某种类型的元素组成的连续内存块(例如整数).
创建数组后,无法更改数组的大小.
因此,数组中的每个整数元素具有固定大小,例如4个字节.
另一方面,列表仅仅是地址的"数组" (也具有固定的大小).
但是然后每个元素都在内存中保存其他内容的地址,这是您想要使用的实际整数.当然,这个整数的大小与数组的大小无关.因此,您始终可以创建一个新的(更大的)整数并"替换"旧的整数,而不会影响数组的大小,而数组只保存整数的地址.
当然,这种便利的清单是有代价的:在整数执行算术,现在需要一个内存访问阵列,再加以整数本身的内存访问,再加上它需要分配更多的内存(如果需要)的时间,加上删除旧整数所需的时间(如果需要).所以是的,它可能会更慢,所以你必须要小心你正在对数组中的每个整数做什么.
你的第一个例子可能是加速.Python循环和对numpy数组中各个项的访问速度很慢.使用矢量化操作:
import numpy as np
x = np.arange(1000000).cumsum()
Run Code Online (Sandbox Code Playgroud)
你可以将无界的Python整数放到numpy数组中:
a = np.array([0], dtype=object)
a[0] += 1232234234234324353453453
Run Code Online (Sandbox Code Playgroud)
在这种情况下,与固定大小的C整数相比较的算术运算会更慢.
对于大多数用途,列表很有用。例如,有时使用 numpy 数组可能更方便。
a=[1,2,3,4,5,6,7,8,9,10]
b=[5,8,9]
Run Code Online (Sandbox Code Playgroud)
考虑一个列表“a”,如果您想访问列表“b”中给出的离散索引处的列表中的元素
a[b]
Run Code Online (Sandbox Code Playgroud)
不管用。
但是当您将它们用作数组时,您可以简单地编写
a[b]
Run Code Online (Sandbox Code Playgroud)
将输出作为数组([6,9,10])。
| 归档时间: |
|
| 查看次数: |
18099 次 |
| 最近记录: |