问题是,当您在一个操作中使用不同的类型时,NumPy会提升这些类型。float32仅当另一个数值操作数的数据类型为:float32或更少
int16或更少
uint16或更少
如果另一个操作数有另一个数据类型,则结果将是float64(如果另一个操作数很复杂,则为complex)。上面列出的数据类型不是最常见的类型,所以几乎所有的操作(特别是当另一个是Python整数/浮点)使用标准运算符+,-,/,*。。。将您的float32提升为float64。在
不幸的是,要避免这种情况你无能为力。在很多情况下,纽比这样做是可以的,因为:大多数体系结构可以像单精度浮点一样处理双精度。Python中的算术操作在Python类型上运行得很快,但在其他类型上运行较慢。在import numpy as np
a32 = np.float32(1)
a64 = np.float64(1)
a = 1.
%timeit [a32 + a32 for _ in range(20000)] # 100 loops, best of 3: 4.58 ms per loop
%timeit [a64 + a64 for _ in range(20000)] # 100 loops, best of 3: 4.83 ms per loop
%timeit [a + a for _ in range(20000)] # 100 loops, best of 3: 2.72 ms per loopPython类型的开销非常大,以至于标量双精度浮点的内存开销几乎可以忽略不计。在
^{pr2}$
但是,如果你有巨大的数组,而你在其他方面