Как получить новый список точек после порогового расстояния?

#python #distance #threshold

#python #расстояние #пороговое значение

Вопрос:

У меня есть массив с координатами. Я вычисляю расстояния между всеми точками. Теперь я хочу показать только координаты, расстояние до которых превышает определенный порог. Как я могу это сделать на python?

 import numpy as np
import scipy
import matplotlib.pylab as plt

dx = np.array([b-a for a,b in combinations (x,2)])
dy = np.array([b-a for a,b in combinations (y,2)])
all_distances = scipy.stats.pdist( np.array(list(zip(x,y))) )
all_distances

df3=all_distances[~(all_distances<=35)]
df4=all_distances[~(all_distances<=40)]
df5=all_distances[~(all_distances<=45)]

fig, ax = plt.subplots()
plt.scatter(df3)
plt.ylabel('dy')
plt.xlabel('dx')
plt.show()
  

Ниже вы видите точку со всеми расстояниями, но теперь мне нужна диаграмма рассеяния с точкой, превышающей пороговое значение 35

диаграмма рассеяния

Комментарии:

1. Не могли бы вы предоставить минимальный рабочий пример, включающий весь импорт и некоторые данные?

2. Да, я добавил диаграмму рассеяния

3. Не могли бы вы, скажем, 10 значений x и y, где 5 должно быть нанесено, а 5 нет?

4. Если у вас есть 10 значений x en y. У вас есть 45 пар с определенным расстоянием и координатами dx / dy. Теперь я хочу пропустить пары ниже или выше определенного расстояния и построить их точку dx / dy. Как я могу это сделать?

5. Если dx и dy имеют ту же длину, что и all_distances, вы можете выполнить plt.scatter(dx [all_distances>35], dy[all_distances>35])

Ответ №1:

Возможно, вы ищете что-то вроде этого

 import numpy as np
from scipy.spatial.distance import pdist

combinations = np.array([(1,2), (3,4), (5,8), (10,12)])

all_distances = pdist( np.array(combinations))
print(all_distances)
print(all_distances[all_distances>3])
  

Вы можете сделать то же самое с другими массивами, поэтому, вероятно, что-то вроде plt.scatter(dx[all_distances>35], dy[all_distances>35]) решает вашу проблему.

Комментарии:

1. Смотрите диаграмму рассеяния. Не все пары узлов отображаются (каждая точка имеет значение dx и dy). Теперь я хочу отобразить только пару узлов с расстоянием> 35. Как я могу это решить?