根据我所读到的关于Numpy数组的内容,它们比标准Python列表更高效。让我困惑的是,当你创建一个numpy数组时,你必须传入一个python列表。我假设这个python列表被解构了,但是在我看来,如果你必须创建一个更大的低效结构来创建一个高效的结构,那么它似乎就违背了拥有一个内存高效的数据结构的目的。
numpy.zeros可以解决这个问题吗?
发布于 2013-06-29 02:15:06
这里有many ways to create a NumPy array。将Python list传递给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、np.empty和np.ones。这些都提供了在不创建大型临时NumPy对象的情况下创建Python数组的方法。
发布于 2013-06-29 02:10:56
通常,如果预先分配大小,Numpy的效率会更高。如果您知道要填充一个MxN matrix...create,那么首先填充它,然后再填充,而不是使用appends。
虽然确实需要创建列表,但效率的大量提高来自于对该结构的操作。读/写/计算/等等。
https://stackoverflow.com/questions/17371059
复制相似问题