【问题标题】:Python numpy subtraction no negative numbers (4-6 gives 254)Python numpy 减法没有负数(4-6 给出 254)
【发布时间】:2014-12-27 23:28:01
【问题描述】:

我希望从彼此中减去 2 个 灰色 人脸以查看差异,但我遇到了一个问题,例如减去[4] - [6] 给出 [254] 而不是 [-2](或差异:[2])。

print(type(face)) #<type 'numpy.ndarray'>
print(face.shape) #(270, 270)
print(type(nface)) #<type 'numpy.ndarray'>
print(nface.shape) #(270, 270)

#This is what I want to do:
sface = face - self.nface #or
sface = np.subtract(face, self.nface)

两者都不给出负数,而是从 255 中减去 0 之后的余数。

sface的输出示例:

[[  8 255   8 ...,   0 252   3]
 [ 24  18  14 ..., 255 254 254]
 [ 12  12  12 ...,   0   2 254]
 ..., 
 [245 245 251 ..., 160 163 176]
 [249 249 252 ..., 157 163 172]
 [253 251 247 ..., 155 159 173]]

我的问题: 在减去 face 和 nface 中的每个点之间的差异后,如何使 sface 成为具有负值的 numpy.ndarray (270,270)? (所以不是 numpy.setdiff1d,因为它只返回 1 维而不是 270x270)

工作

根据@ajcr 的回答,我做了以下操作(abs() 用于显示减面):

face_16 = face.astype(np.int16)
nface_16 = nface.astype(np.int16)
sface_16 = np.subtract(face_16, nface_16)
sface_16 = abs(sface_16)
sface = sface_16.astype(np.int8)

【问题讨论】:

  • 无法复制,如果我创建两个包含 0-255 范围内值的 numpy 数组,我可以简单地执行 a - b,它会给我负数。
  • 您的数组必须是无符号整数类型 - 尝试例如dtype=np.int16.

标签: python numpy grayscale subtraction array-difference


【解决方案1】:

听起来数组的dtypeuint8。所有数字都将被解释为 0-255 范围内的整数。这里,-2 等于 256 - 2,因此减法的结果是 254。

您需要将数组重新转换为支持负整数的dtype,例如int16 像这样...

face = face.astype(np.int16)

...然后减去。

【讨论】:

  • 我现在使用了以下代码( abs() 用于显示面部):好的 nvm,代码在这里不起作用,请参阅我的帖子
【解决方案2】:

这是 numpy 数组中数据类型的问题。你里面有一个 uint8,它似乎环绕

看看nfac.dtype,它会显示给你看。您必须在计算操作之前对其进行转换。使用 numpy.ndarray.astype 进行转换或查看In-place type conversion of a NumPy array

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多