Numpy报”TypeError:unsupported operand type(s)for-:’numpy.ndarray’and’int’ “的原因以及解决办法

  • Post category:Python

报错信息:”TypeError: unsupported operand type(s) for -: ‘numpy.ndarray’ and ‘int'”

这个错误通常发生在我们试图用一个整数去减去一个数组时。比如:

import numpy as np

a = np.array([1, 2, 3])
b = a - 1

运行上面的代码会抛出上面的TypeError异常。因为 b = a – 1,这条语句中的减法操作符 (-) 无法处理一个数组 a 和一个整数 1。

这是因为在 numpy 中,减法操作符 (-) 可以执行元素级别的减法操作,也就是将两个数组中的每个元素分别相减,但不能将数组作为一个整体减去一个数值。因此,正确的做法是将 1 转化为一个数组 [1],使得其可以与数组 a 互相匹配:

import numpy as np

a = np.array([1, 2, 3])
b = a - np.array([1])

在这个例子中,np.array([1]) 表示一个只有一个元素的数组,它和数组 a 同时进行了减法运算,返回的结果是一个新的数组 b,表示每个元素都减去 1 后的结果。

当然,如果我们减去的是一个与原数组形状相同的数组,那么也是没有问题的,例如:

import numpy as np

a = np.array([1, 2, 3])
b = np.array([1, 1, 1])
c = a - b

其中 c 的结果就是一个数组,它表示每个元素都减去相同的值后的结果。

因此,要解决这个问题,我们需要确保操作符左右两侧的数组具有相同的形状。如果需要减去一个单独的数值,需要将它转化为一个形状相同的数组。