Эффективно назначать значение в пределах заданного диапазона в Numpy

#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. Превосходно и аккуратно, как всегда