【发布时间】:2012-12-31 14:38:54
【问题描述】:
在我目前的工作中,我经常使用 Numpy 和列表推导式,为了获得最佳性能,我有以下问题:
如果我按如下方式创建 Numpy 数组,幕后实际会发生什么?
a = numpy.array( [1,2,3,4] )
我的猜测是python首先创建一个包含值的普通列表,然后使用列表大小分配一个numpy数组,然后将值复制到这个新数组中。这是正确的,还是解释器足够聪明,可以意识到列表只是中间值,而是直接复制值?
同样,如果我希望使用 numpy.fromiter() 从列表理解创建一个 numpy 数组:
a = numpy.fromiter( [ x for x in xrange(0,4) ], int )
这会导致在输入fromiter()之前创建一个中间值列表吗?
【问题讨论】:
-
如果您想避免创建列表,为什么要
a = numpy.fromiter( [ x for x in xrange(0,4) ], int )而不是简单的a = numpy.fromiter(xrange(4), int)? -
@wim 或只是
np.arange... -
只是一个例子(一个可怜的例子,我承认)。表达式可以是任何东西
-
请注意,如果您需要
np.arange,但我想您可能已经知道了。 -
@wim 提出的观点是,
numpy.fromiter(list(something), ...或numpy.fromiter([something], ...应该永远被使用!无论something是什么,始终使用numpy.fromiter(something, ...。
标签: python performance numpy