繁体   English   中英

在Numpy中有效地分配预定义范围内的值

[英]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以及boolint8具有相同的 itemsize 将b_topb_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM