这将创建一个类型为signed int
的空数组:
import array
a = array.array('i')
什么是一个有效的(性能明智的)方式来指定数组的长度(以及数组的秩-维数)?
我理解NumPy
允许在创建时指定数组大小,但它可以在标准Python中完成吗?
在python中初始化固定大小的数组
这主要处理列表,并且不考虑性能。使用数组而不是列表的主要原因是性能。
数组构造函数接受iterable
作为第二个参数。因此,下面的工作可以有效地创建并初始化数组为0. N-1:
x = array.array('i', range(N))
这不会创建一个单独的N元素向量或列表。
(如果使用python 2,请使用xrange
代替)。当然,如果您需要不同的初始化,您可以使用生成器对象而不是range
。例如,可以使用生成器表达式用零填充数组:
a=array.array('i',(0 for i in range(N)))
Python没有2D(或更高)数组。你必须从一列1D数组中构造一个。
事实是,如果你正在寻找一个高性能的实现,你可能应该使用Numpy。
简单快捷:
array.array('i', [0]) * n
在我的机器中初始化数组的不同方式的计时:
n = 10 ** 7
array('i', [0]) * n # 21.9 ms
array('i', [0]*n) # 395.2 ms
array('i', range(n)) # 810.6 ms
array('i', (0 for _ in range(n))) # 1238.6 ms
你说
使用数组而不是列表的主要原因是性能。
数组使用的内存肯定比列表少。
但是通过我的实验,我发现没有证据表明数组总是比普通列表快。