Вычитание numpy массивов дает неожиданные результаты - PullRequest
1 голос
/ 06 августа 2020

Следующее дает ожидаемые результаты:

import numpy as np

v1 = np.array([255, 0, 0])
v2 = np.array([250, 0, 0])

print(v1 - v2)
print(v2 - v1)

Результаты:

[255   0   0]
[250   0   0]
[5 0 0]
[-5  0  0]

Однако следующее, которое должно давать (IMHO), дает те же результаты, не дает:

import numpy as np

image_array = np.zeros([2, 3, 3], dtype=np.uint8)
image_array[0,0] = np.array([255, 0, 0])
colors = np.zeros([3, 3], dtype=np.uint8)

colors[0] = np.array([250, 0, 0])
print(image_array[0,0])
print(colors[0])
print(image_array[0,0] - colors[0])
print(colors[0] - image_array[0,0])

Результаты:

[255   0   0]
[250   0   0]
[5 0 0]
[251   0   0]

Почему последняя строка тоже не отображается?:

[-5  0  0]

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Причина в том, что во втором случае ваш dtype - это np.uint8 и это беззнаковый тип данных. Для uint8 значения равны values=[0,1,...,251,252,253,254,255]. Для -5 он начинается с наименьшего значения, то есть 0, и возвращается на 5 позиций назад в значениях и достигает 251.

1 голос
/ 06 августа 2020

np.unit8 не может быть отрицательным, поэтому при вычитании возникает ошибка переполнения: en.wikipedia.org/wiki/Integer_overflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...