Максимум 2 массива unint8 - PullRequest
       9

Максимум 2 массива unint8

0 голосов
/ 09 октября 2018

Я хочу получить максимум 2 numpy массива uint8 (от 0 до 255), но хочу исключить значение 255.

x1 = np.array([[0, 1], [2, 255]], dtype=np.uint8)
x1 = np.array([[2, 2], [255, 255]], dtype=np.uint8)

result:
array([[2, 2], [2, 255]], dtype=uint8)

Как это сделать эффективно?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вот простой трюк, использующий переполнение и понижение.

>>> np.maximum(x1+1, x2+1)-1
array([[  2,   2],
       [  2, 255]], dtype=uint8)
0 голосов
/ 09 октября 2018

Я думаю, вам нужно np.maximum () :

import numpy as np

x1 = np.array([[0, 1], [2, 255]], dtype=np.uint8)
x2 = np.array([[2, 2], [255, 255]], dtype=np.uint8)

print(np.maximum(x1, x2))
#[[  2   2]
# [255 255]]

РЕДАКТИРОВАТЬ

В другом ответе у вас есть актуальное решение,который я редактировал для использования нескольких массивов:

x1 = np.array([[0, 1], [2, 255]], dtype=np.uint8)
x2 = np.array([[2, 2], [255, 255]], dtype=np.uint8)
x3 = np.array([[4, 255], [2, 255]], dtype=np.uint8)

reduce(np.maximum, np.stack((x1, x2, x3))+1)-1
#[[  4   2]
# [  2 255]]
...