在我的当前工作中,我经常使用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(xrange(4), int)
而是使用a = numpy.fromiter([x for x in xrange(0,4)], int)
? - wimnp.arange
... - Jon Clementsnumpy.fromiter(list(something), ...
或numpy.fromiter([something], ...
绝对不应该被使用!无论something
是什么,都应该始终使用numpy.fromiter(something, ...
。 - Stefano M