我了解到在
x = f() * g()
中,首先执行f()
,然后执行g()
,然后将结果相乘,并最终赋值给x
。但下面的内容似乎与此相矛盾:import numpy as np
print(np.sqrt(2).dtype)
print((np.array([1.], dtype='float32') * np.array([.5], dtype='float64')).dtype)
print((np.array([1.], dtype='float32') * np.sqrt(2)).dtype)
>>> float64
>>> float64
>>> float32
根据我的所有先前经验,Numpy会升级到更高的dtype
,但这里不是。如果我们分配单独的数组并在之后进行乘法运算,则行为相同。我想Numpy使用了除了dtype
以外的一些隐藏属性,而不是覆盖Python执行。
它是如何工作的?
dtype
始终优先于标量(0-dim)的dtype
? - OverLordGoldDragon@njit
不遵循此约定。 - OverLordGoldDragonfloat64
,即使每个其他标量和ndim数组都是float32
,例如2. * x
... 我更希望它遵循Numpy的规则。 - OverLordGoldDragon