运算符不支持 Numpy 广播 /=

Numpy broadcasting is not supported by the operant /=

我正在学习 Coursera 上的深度学习课程。

我发现在做矩阵除法的时候,像这样:

x_norm = np.linalg.norm(x, axis=1, keepdims=True)
x = x / x_norm

它工作正常。但是当我的声明改为:

x /= x_norm

它不起作用,为什么?

如果 x 是整数 dtype 数组,您将得到此 casting 错误:

In [1]: x = np.arange(1,4)
In [2]: x /= 10
Traceback (most recent call last):
  Input In [2] in <cell line: 1>
    x /= 10
UFuncTypeError: Cannot cast ufunc 'true_divide' output from dtype('float64') to dtype('int64') with casting rule 'same_kind'

如果数组浮动就没有这样的问题:

In [3]: y = x.astype(float)
In [4]: y /= 10
In [5]: y
Out[5]: array([0.1, 0.2, 0.3])

*= 0.1 也会引发转换错误。任何试图将 float 放入 int 数组的东西。像 x[:] = 1.1 这样的赋值会默默地将浮点数转换为整数——这是一个更常见的困惑原因。