从我读过的有关Numpy数组的内容来看,它们比标准Python列出的内存效率更高。令我困惑的是,当你创建一个numpy数组时,你必须传入一个python列表。我假设这个python列表被解构了,但是对我来说,如果你必须创建一个更大的低效结构来创建有效的数据结构,它似乎就失去了拥有内存高效数据结构的目的。
numpy.zeros会解决这个问题吗?
答案 0 :(得分:7)
有many ways to create a NumPy array。将Python列表传递给np.array
或np.asarray
只是一种方式。
另一种方法是使用迭代器:
In [11]: np.fromiter(xrange(10), count=10, dtype='float')
Out[11]: array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
在这种情况下,没有涉及大的临时Python列表。因此,您可以定义generator function而不是构建Python列表,从而生成列表中的项目。然后创建数组,您将生成器传递给np.fromiter
。由于np.fromiter
总是创建一维数组,因此要创建更高维数组,请在返回值上使用reshape
。
还有np.fromfunction
,np.frombuffer
,np.fromfile
,np.loadtxt
,np.genfromtxt
,np.fromstring
,np.zeros
,{{ 1}}和np.empty
。这些都提供了创建NumPy数组的方法,而无需创建大型临时Python对象。
答案 1 :(得分:1)
如果预先分配大小,Numpy通常会更有效。如果您知道要填充MxN矩阵...首先创建它然后填充而不是使用附加例如。
虽然必须创建列表,但效率的很多提高来自于对该结构的影响。读/写/计算/等