从我读到的关于 Numpy 数组的内容来看,它们比标准 Python 列出的内存效率更高。让我困惑的是,当你创建一个 numpy 数组时,你必须传入一个 python 列表。我假设这个 python 列表被解构了,但对我来说,如果你必须创建一个更大的低效结构来创建高效的结构,它似乎违背了拥有内存高效数据结构的目的。
numpy.zeros 能解决这个问题吗?
有很多方法可以创建 NumPy 数组。将 Python 列表传递给np.array
ornp.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
总是创建一维数组,因此要创建更高维数组,请使用reshape
返回值。
还有np.fromfunction
, np.frombuffer
, np.fromfile
, np.loadtxt
, np.genfromtxt
, np.fromstring
, np.zeros
,np.empty
和np.ones
。这些都提供了在不创建大型临时 Python 对象的情况下创建 NumPy 数组的方法。
如果您预先分配大小,Numpy 通常会更有效。如果您知道要填充 MxN 矩阵...首先创建它然后填充而不是使用附加例如。
虽然确实必须创建列表,但效率的许多改进来自于对该结构采取行动。读/写/计算/等。