Python 在二维numpy阵列中删除彼此之间具有特定距离的点

Python 在二维numpy阵列中删除彼此之间具有特定距离的点,python,python-3.x,numpy,numpy-ndarray,Python,Python 3.x,Numpy,Numpy Ndarray,我有以下2D阵列: 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,

我有以下2D阵列:

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”。

一个使用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]);
remove = np.delete(x,np.unique(np.concatenate([b[diss < distance], a[diss < distance]])), axis=0)
plt.scatter(remove[:,0], remove[:,1]);
一个带有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]);
remove = np.delete(x,np.unique(np.concatenate([b[diss < distance], a[diss < distance]])), axis=0)
plt.scatter(remove[:,0], remove[:,1]);

你应该编写一个程序来实现这一点。我已经创建了一个距离矩阵,在本例中是27乘27,然后,我找到了目标值的索引。我的问题是,我不知道如何根据27乘27的矩阵索引过滤这个2D数组!向我们展示更多您尝试过的内容并解释其失败原因:我刚刚更新了代码。数组[0]是什么意思?您应该编写一个程序来实现这一点。我创建了一个距离矩阵,在本例中是27乘27,然后,我找到了目标值的索引。我的问题是,我不知道如何根据27乘27的矩阵索引过滤这个2D数组!向我们展示更多您尝试过的内容,并解释它是如何失败的:我刚刚更新了代码。数组[0]是什么意思?