首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消除一维阵列中的斑点/斑点

消除一维阵列中的斑点/斑点
EN

Stack Overflow用户
提问于 2018-05-18 03:27:40
回答 1查看 130关注 0票数 1

我有一个包含一些“坏”值的一维NumPy数组。我想把它们剔除。

每个坏值的邻居都是“淘气的”,但我也想剔除它们。

对于不好的值,一个可靠的测试是问:

代码语言:javascript
复制
arr<0.1

然而,对于一个淘气值,唯一可靠的(我能想到的)测试就是它靠近一个坏的值。

我正在使用以下策略来消除不好的和不好的值:

代码语言:javascript
复制
import numpy as np

c     = np.random.random(100) #Construct test data

who = np.where(c<0.1)[0]      #Reliable test for bad values
c[who] = 0                    #Zero bad values
#Add and subtract from the indices of the bad values to cull
#their neighbours
wht = who-1; wht = wht[np.logical_and(0<wht,wht<len(c))]; c[wht]=0
wht = who+1; wht = wht[np.logical_and(0<wht,wht<len(c))]; c[wht]=0
wht = who+2; wht = wht[np.logical_and(0<wht,wht<len(c))]; c[wht]=0
wht = who-2; wht = wht[np.logical_and(0<wht,wht<len(c))]; c[wht]=0

不幸的是,上述过程相当缓慢。

有没有更快的方法来执行这个或类似的操作?

EN

回答 1

Stack Overflow用户

发布于 2018-05-18 03:48:05

对于邻居的通用窗口长度,一种可扩展的解决方案是对阈值比较的掩码进行binary-dilate,然后使用该掩码来设置零。

代码语言:javascript
复制
from scipy.ndimage.morphology import binary_dilation

W = 2 # window length of neighbors
thresh = 0.1
mask = c < thresh
kernel = np.ones(2*W+1)
mask_extended = binary_dilation(mask, kernel)
c[mask_extended] = 0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50399189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档