NumPy数组内存分配

4

根据我所了解的Numpy数组,它们比标准Python列表更加内存高效。但是令我困惑的是,当你创建一个numpy数组时,你必须传入一个Python列表。我猜测这个Python列表会被拆分,但是对我来说,似乎这样做有些抵消了使用内存高效的数据结构的目的,因为你需要创建一个更大的低效数据结构来创建高效的数据结构。

那么numpy.zeros是否可以解决这个问题?

2个回答

8

很多种方法可以创建NumPy数组。将Python列表传递给np.arraynp.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列表。因此,您可以定义一个生成函数来产生列表中的项目,而不是构建Python列表。然后,将生成器传递给np.fromiter来创建数组。由于np.fromiter始终创建1D数组,因此要创建更高维度的数组,请对返回值使用reshape
还有np.fromfunctionnp.frombuffernp.fromfilenp.loadtxtnp.genfromtxtnp.fromstringnp.zerosnp.emptynp.ones。它们都提供了一种创建NumPy数组的方法,而不创建大型临时Python对象。

1
总的来说,如果你预先分配大小,Numpy更加高效。 如果你知道你将要填充一个MxN矩阵...先创建它,然后再填充,而不是使用append等方法。
虽然列表必须被创建,但很多效率提升来自于对该结构的操作。 读/写/计算等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接