python numpy检测并消除不需要的值
发布时间:2020-12-20 11:47:07 所属栏目:Python 来源:网络整理
导读:我在Numpy数组中有一组(x; y)点,代表下面显示的曲线.我想检测并消除数组中破坏函数连续性的值.有可能吗? 编辑 这是非期望值所在的函数的一组数据值.我手动定位但这不是我需要的 set_of_data = np.array([ [ 0.01099914,0.1990088 ],[ 0.00235953,0.20015288
我在Numpy数组中有一组(x; y)点,代表下面显示的曲线.我想检测并消除数组中破坏函数连续性的值.有可能吗?
编辑 set_of_data = np.array([ [ 0.01099914,0.1990088 ],[ 0.00235953,0.20015288],[-0.00628651,0.20127308],[-0.01493928,0.20236874],[-0.02359911,0.20343921],[-0.0322663,0.20448377],[-0.04094121,0.20550169],[-0.04962419,0.20649219],[-0.0583156,0.20745447],[-0.06701583,0.20838767],[-0.07572529,0.20929091],[-0.0844444,0.21016325],[-0.09317361,0.21100373],[-0.10191339,0.2118113 ],[-0.11066424,0.21258489],[-0.11942668,0.21332338],[-0.12820128,0.21402557],[-0.13698863,0.2146902 ],[-0.10507277,0.20535413],#<-- point to remove [-0.14749565,0.21590372],[-0.15646386,0.2164481 ],[-0.16552084,0.21694332],[-0.17466738,0.2173836 ],[-0.18390426,0.21776298],[-0.19323216,0.21807525],[-0.20265175,0.21831395],[-0.21216362,0.21847237],[-0.2217683,0.21854352],[-0.23146627,0.21852011],[-0.24125792,0.21839456] ]) 解决方法
这是一种相当强大的方法:
for i in range(1,len(data) - 1): backward_angle = np.arctan2(data[i][1] - data[i - 1][1],data[i][0] - data[i - 1][0]) forward_angle = np.arctan2(data[i + 1][1] - data[i][1],data[i + 1][0] - data[i][0]) angle_difference = (backward_angle - forward_angle + np.pi) % (2 * np.pi) - np.pi if np.absolute(angle_difference) > np.pi / 2: print "Outlier:",data[i] 它计算从前一点到当前点以及从当前点到下一点的方向.如果差值(模2π)大于pi / 2(即90度),则检测到异常值. 输出: Outlier: [-0.13698863 0.2146902 ] Outlier: [-0.10507277 0.20535413] 请注意,检测到两个点,因为方向有两个变化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |