#python #numpy
Вопрос:
Цель состоит в том,чтобы присвоить новое значение в определенном диапазоне (b_top, b_low).
Приведенный ниже код способен достичь намеченной цели
b_top=np.array([1,7])
b_low=np.array([3,9]) 1
Mask=np.zeros((1,11), dtype=bool)
for x,y in zip(b_top,b_low):
Mask[0,x:y]=True
Однако мне интересно, существует ли однострочный подход или более эффективный способ сделать это?
Ответ №1:
Вы можете превратить b_top
и b_low
в маску, используя np.cumsum
и тот факт, что bool
и int8
размеры предметов одинаковы.
header = np.zeros(M.shape[1], np.uint8)
header[b_top] = 1
header[b_low if b_low[-1] < header.size else b_low[:-1]] = -1
header.cumsum(out=Mask[0].view(np.int8))
Я реализовал эту функцию в небольшой служебной библиотеке, которую я создал. Вызывается функция haggis.math.runs2mask
. Вы бы назвали это так
from haggis.math import runs2mask
Mask[0] = runs2mask(np.stack((b_top, b_low), -1), Mask.shape[1])
Комментарии:
1. Превосходно и аккуратно, как всегда