gpt4 book ai didi

python - 根据间隙大小更改 numpy 数组中的间隙

转载 作者:行者123 更新时间:2023-12-03 19:09:09 24 4
gpt4 key购买 nike

我需要过滤掉零之间的短非零系列。例如,这个数组:

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])

最佳答案

您可以使用基于图像处理的 binary_closing ——

from scipy.ndimage.morphology import binary_closing

def remove_small_nnz(a, W):
K = np.ones(W, dtype=int)
m = a==0
p = binary_closing(m,K)
a[~m & p] = 0
return a
sample 运行 -
In [97]: a
Out[97]: array([1, 3, 1, 0, 0, 1, 8, 3, 0, 8, 2, 4, 7, 0, 0, 4, 1])

In [98]: remove_small_nnz(a, W=3)
Out[98]: array([1, 3, 1, 0, 0, 1, 8, 3, 0, 8, 2, 4, 7, 0, 0, 4, 1])

In [99]: remove_small_nnz(a, W=4)
Out[99]: array([1, 3, 1, 0, 0, 0, 0, 0, 0, 8, 2, 4, 7, 0, 0, 4, 1])

In [100]: remove_small_nnz(a, W=5)
Out[100]: array([1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1])

关于python - 根据间隙大小更改 numpy 数组中的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62797505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com