操作符/=不支持Numpy广播

s1ag04yj  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(101)

我正在学习Coursera上的深度学习课程。
我发现,当做矩阵除法时,就像下面这样:

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

字符串
它工作正常。但当我是声明,而不是:

x /= x_norm


它不工作,为什么呢?

klsxnrf1

klsxnrf11#

如果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也会引发转换错误。任何试图将浮点数放入int数组的操作。像x[:] = 1.1这样的x[:] = 1.1会默默地将浮点数转换为整数-这是更常见的困惑原因。

5f0d552i

5f0d552i2#

x = x/x_norm #instead of x /= x_norm

字符串

相关问题