如何将数组中的值更改为负数

时间:2016-04-22 15:41:27

标签: python numpy

我将图像转换为数组,我想将这些值更改为双极(1,-1),如下所示:

im = Image.open("letter_d.png").convert("L")
ar = np.array(im)
ar[ar == 0] = 1
ar[ar == 255] = -1

我得到这样的东西:

[[255   1   1   1 255 255 255]
[  1   1   1   1   1 255 255]
[  1   1 255 255   1   1 255]
[  1   1 255 255 255   1   1]
[  1   1 255 255 255   1   1]
[  1   1 255 255 255   1   1]
[  1   1 255 255   1   1   1]
[  1   1   1   1   1   1 255]
[255 255 255 255 255 255 255]]

问题是255个值保持不变,我注意到如果相反,我会尝试将它们更改为正值,如2继续。

2 个答案:

答案 0 :(得分:4)

看起来你有一个dtype uint8数组:

>>> ar = np.array([0, 255], dtype=np.uint8)
>>> ar
array([  0, 255], dtype=uint8)
>>> ar[1] = -1
>>> ar
array([  0, 255], dtype=uint8)
>>> ar[1] = -2
>>> ar
array([  0, 254], dtype=uint8)

如果是这种情况,则您不能有负值(u中的uint8表示"无符号")。当您尝试将负值设置为-1时,它会"回绕"达到最大值(2' s恭维)。

您需要转换为其他(签名)类型。

>>> signed_array = np.array(ar, dtype=int)
>>> signed_array
array([  0, 254])
>>> signed_array[1] = -1
>>> signed_array
array([ 0, -1])

您选择的类型可能取决于您将在那里打包的值的范围,但int / np.int32对于大多数应用来说应该是非常安全的......

答案 1 :(得分:0)

使用np.int8将数组转换为ar.astype(np.int8)会自动将255转换为-1 s