[英]Efficiently assign a value within predefined range in 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
但是,我想知道有单行方法,或更有效的方法吗?
您可以使用np.cumsum
以及bool
和int8
具有相同的 itemsize 将b_top
和b_low
转换为掩码。
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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.