numpy数组内存分配

时间:2013-06-28 18:08:43

标签: python numpy

从我读过的有关Numpy数组的内容来看,它们比标准Python列出的内存效率更高。令我困惑的是,当你创建一个numpy数组时,你必须传入一个python列表。我假设这个python列表被解构了,但是对我来说,如果你必须创建一个更大的低效结构来创建有效的数据结构,它似乎就失去了拥有内存高效数据结构的目的。

numpy.zeros会解决这个问题吗?

2 个答案:

答案 0 :(得分:7)

many ways to create a NumPy array。将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列表。因此,您可以定义generator function而不是构建Python列表,从而生成列表中的项目。然后创建数组,您将生成器传递给np.fromiter。由于np.fromiter总是创建一维数组,因此要创建更高维数组,请在返回值上使用reshape

还有np.fromfunctionnp.frombuffernp.fromfilenp.loadtxtnp.genfromtxtnp.fromstringnp.zeros,{{ 1}}和np.empty。这些都提供了创建NumPy数组的方法,而无需创建大型临时Python对象。

答案 1 :(得分:1)

如果预先分配大小,Numpy通常会更有效。如果您知道要填充MxN矩阵...首先创建它然后填充而不是使用附加例如。

虽然必须创建列表,但效率的很多提高来自于对该结构的影响。读/写/计算/等