在我目前的工作中,我经常使用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()之前创建一个中间值列表吗?
致意 尼尔斯
我相信你要找的答案是使用
generator expressions
和numpy.fromiter。生成器表达式很懒-当您遍历它们时,它们会计算表达式的值。
使用列表理解生成列表,然后将其馈送到numpy中,而生成器表达式将一次生成一个。
Python像大多数语言(如果不是全部的话)一样,对内部和外部进行求值,因此使用
[<something> for <something_else> in <something_different>]
可以生成列表,然后对其进行迭代。你可以创建自己的列表,并用它进行实验,以了解情况。。。
相关问题 更多 >
编程相关推荐