不能在 numpy 数组上使用 /=

Can't use /= on numpy array

numpy数组上,为什么我可以成功使用/ 2:

>>> a=np.array([2, 4, 6])
>>> a = a / 2
>>> a
array([ 1.,  2.,  3.])

但是我不能使用a /= 2?

>>> a=np.array([2, 4, 6])
>>> a /= 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide

我看过 numpy Issue 6464,但不明白阅读它和链接的发行说明这不起作用的原因。

有什么方法可以让 /= 按预期工作吗?

正如评论中所指出的,从 int(这是 a 的创建方式)到 float(这是 / 的结果)的更改是不允许的使用 /=。要 "fix" 这个 adtype 从一开始就必须是一个浮点数:

a=np.array([2, 4, 6], dtype=np.float64)
a/=2
print(str(a))
>>>array([1., 2., 3.])

评论中提到,a / 2产生的是float数组,而a的类型是整型。由于 NumPy 的赋值运算符经过优化以重用相同的数组(即 a = a + 2a += 2 完全相同 ,第一个创建一个新数组,而第二个只是重用现有的),当结果具有不同的 dtype 时,您不能使用它们。如果你想要的是整数除法,可以使用//=赋值操作:

>>> a = np.array([2, 4, 6])
>>> a //= 2
>>> a
array([1, 2, 3])