4

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

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

4

2 回答 2

8

很多方法可以创建 NumPy 数组。将 Python 列表传递给np.arrayornp.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.emptynp.ones。这些都提供了在不创建大型临时 Python 对象的情况下创建 NumPy 数组的方法。

于 2013-06-28T18:15:06.227 回答
1

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

虽然确实必须创建列表,但效率的许多改进来自于对该结构采取行动。读/写/计算/等。

于 2013-06-28T18:10:55.840 回答