Я работаю над некоторыми многомерными целочисленными данными, и по соображениям памяти мы должны использовать int8s для всего.Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно делать умножения матриц с этими данными int8, но если результат становится больше 127, мне нужно просто вернуть 127 вместо того, что бы переполнение было.
Дляпример:
import numpy as np
a = np.random.choice([0,1], size=[128,2000]).astype(np.int8)
b = np.random.randint(0,128, size=[2000,2000]).astype(np.int8)
c = np.matmul(a, b)
# c returns values between -128 and 127, instead of the desired 0 to 127
Для пояснения, я не просто ищу лишние пробелы без знака, которые можно себе позволить - значения в b иногда могут быть отрицательными.(Я только что сделал все положительные, чтобы проиллюстрировать мою точку зрения.)
Есть ли алгоритм или трюк Numpy, которые позволили бы мне ограничить эти операции, а не переполнять их?Я просмотрел документацию Numpy и спросил некоторых моих друзей в отделе CS, но мне еще предстоит найти какие-либо рекомендации по этому вопросу.
Наконец, я знаю, что мог бы сделать кое-что в C снемного сложновато, но остальная часть нашего проекта неизбежно в Python с небольшим шансом расширения (и учитывая Python, я бы предпочел использовать Numpy для умножения матриц, если это вообще возможно).
Спасибо, всем!