我使用numpy.array()函数从列表中创建numpy.float64标准数组。
我注意到,当列表包含None或提供列表列表时,这是非常缓慢的。
下面是一些时间示例。有明显的解决方法,但为什么这么慢?
无列表示例:
###使用None列表调用array()的速度非常慢在[3]中:%timeit numpy.array([None]*100000,dtype=numpy.float64)1个回路,最好为3:240 ms/回路###零数组不存在问题在[4]中:%timeit numpy.array([0.0]*100000,dtype=numpy.float64)100个回路,最好为3:9.94 ms/回路###如果使用dtype=object并将其转换为float64,则速度也会很快在[5]中:%timeit numpy.array([None]*100000,dtype=numpy.object).astype(numpyfloat64)100个回路,最好为3:4.92 ms/回路###如果使用数组()的fromiter()insead,也会很快在[6]中:%timeit numpy.fromiter([None]*100000,dtype=numpyfloat64)100个回路,最好为3:3.29 ms/回路
列表列表示例:
###创建列矩阵的速度非常慢在[7]中:%timeit numpy.array([[0.0]]*100000,dtype=numpy.float64)1个回路,每个回路最好为3:353 ms###创建列向量和重塑形状没有问题在[8]中:%timeit numpy.array([0.0]*100000,dtype=numpy.foat64).reform((-1,1))100个回路,每回路最佳3:10 ms###可以使用itertools展平输入列表在[9]中:%timeit numpy.fromiter(itertools.chain.from_iterable([0.0]]*100000),dtype=numpy.float64).reshape((-1,1))100个回路,最好为3:9.65 ms/回路