为了账号安全,请及时绑定邮箱和手机立即绑定

删除二维 numpy 数组中彼此特定距离的点

删除二维 numpy 数组中彼此特定距离的点

喵喔喔 2023-09-05 21:05:52
我有以下二维数组:MyData = array([x = [ 82, 210, 203, 234, 135,  92, 176, 146, 246,  35, 257, 227, 258,    132,  31, 160, 269,  24, 248, 274, 281, 279,  71,  21, 188, 163,    243],   y = [ 15,  16,  18,  18,  19,  21,  23,  29,  35,  47,  50,  53,  60,     64,  67,  69,  77,  88,  89,  91, 105, 115, 138, 175, 178, 205,    207]], dtype=int64)我想删除彼此之间处于特定欧几里德距离的所有 x 和 y 对。例如,此处 (210,16) 和 (203,18) 的距离小于 10,均应删除。然而,在这样做之前,我首先需要所有距离(这很容易),然后我必须删除它们。所以,我创建了这个距离矩阵:distance = np.zeros((27,27))for i in range (0 , 27):    for j in range (0 , 27):        dist= np.linalg.norm(MyData[:,i] - MyData[:,j])        distance[i,j] = dist然后使用以下条件,我找到了我的索引:indx = (np.where((distance >  0) & (distance <= 10)))[0]indy = (np.where((distance > 0) & (distance <= 10)))[1]现在,我不确定如何使用从 indx 和 indy 获得的索引来过滤“MyData”。
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

numpy的解决方案

首先准备数据


import numpy as np

x = np.array([[ 82, 210, 203, 234, 135,  92, 176, 146, 246,  35, 257, 227, 258,

    132,  31, 160, 269,  24, 248, 274, 281, 279,  71,  21, 188, 163,

    243],

   [ 15,  16,  18,  18,  19,  21,  23,  29,  35,  47,  50,  53,  60,

     64,  67,  69,  77,  88,  89,  91, 105, 115, 138, 175, 178, 205,

    207]]).T

计算所有点对的距离


a,b = np.tril_indices(27, -1)

diss = np.linalg.norm(x[b] - x[a], axis=1)

找到距离小于阈值的点


distance = 10

near = x[np.unique(np.concatenate([b[diss < distance], a[diss < distance]]))]

然后我们可以绘制点


import matplotlib.pyplot as plt


plt.scatter(x[:,0], x[:,1])

plt.scatter(near[:,0], near[:,1]);

https://img1.sycdn.imooc.com//64f728060001858404150257.jpg

删除点


remove = np.delete(x,np.unique(np.concatenate([b[diss < distance], a[diss < distance]])), axis=0)

plt.scatter(remove[:,0], remove[:,1]);

https://img1.sycdn.imooc.com//64f72812000149fa04140258.jpg

查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信