【发布时间】:2020-10-29 00:34:43
【问题描述】:
我需要过滤掉介于零之间的短非零系列。比如这个数组:
t = np.array([1, 3, 1, 0, 0, 1, 8, 3, 0, 8, 2, 4, 7, 0,0,4,1])
应该变成:
array([1, 3, 1, 0, 0, 0, 0, 0, 0, 8, 2, 4, 7, 0, 0, 4, 1])
我找到了非零序列的第一个索引,并计算了它们之间的非零数。我写了以下内容,它有效,但看起来很糟糕。我尝试了工作人员,但出现错误。 如何用pythonicly重写它?
minseq = 4 # length of minimal non zero seq
p = np.where(fhr>0, 1, 0).astype(int)
s = np.array([1]+ list(np.diff(p)))
sind = np.where(s==1)[0][1:]
print(sind)
for i in range(len(sind) - 1):
s1 = sind[i]
e1 = sind[i+1]
subfhr = np.where(fhr[s1:e1] > 0, 1, 0).sum()
if (subfhr < minseq):
print(s1, e1, subfhr)
fhr[s1:e1] = 0
出来:
[ 5 9 15]
5 9 3
array([1, 3, 1, 0, 0, 0, 0, 0, 0, 8, 2, 4, 7, 0, 0, 4, 1])
【问题讨论】:
-
只是好奇,为什么
8 2 4 7系列不归零? -
@QuangHoang 必须是窗口参数,因为它会删除
1, 8, 3,但不会删除8 2 4 7。 -
@QuangHoang 8,2,4,7 长度为 4,1,8,3 长度为 3。我会更正问题
标签: python numpy conditional-statements sequence