Я хотел бы рассчитать расстояния от каждой точки до каждой другой точки в Python, и я хочу сделать это с помощью цикла.
У меня есть решение с помощью proc sql, и я попробовал его с Python, но получил разные числа .
Вот моя таблица и код расстояния от одной точки до других точек:
import pandas as pd
data = {
'object': ['A', 'B', 'C', 'D'],
'value1': [79.826732673, 78.268876611, 64.04744255, 58.866103739],
'value2': [2.7227722772, 2.7624309392, 2.8910303929, 3.6188178528]
}
df = pd.DataFrame(data)
Это должен быть результат для A
x = df0["value1"]
y = df0["value2"]
x_ref = 79.826732673
y_ref = 2.7227722772
dist = np.sqrt((x-x_ref)**2 + (y-y_ref)**2) # euklidean distance
np.mean(dist)
Когда я использую цикл для определения расстояния от каждой точки до каждой точки, я получаю неверные числа.
for i in range(0,3):
x_ref = df0.iloc["value1"]
y_ref = df0.iloc["value2"]
eklidean = np.sqrt((df0["value1"] - x_ref)**2 + (df0["value2"] - y_ref)**2)
eklidean
object
A 15.780187
B 14.222015
C 0.000000
D 5.232203
dtype: float64
Не могли бы вы подсказать, что я делаю неправильно в цикле?
Вот также возможное решение в SAS proc sql (без цикл):
DATA points;
INPUT object $ value1 value2;
DATALINES;
A 79.826732673 2.7227722772
B 78.268876611 2.7624309392
C 64.04744255 2.8910303929
D 58.866103739 3.6188178528
;
RUN;
PROC SQL;
CREATE TABLE kombinations AS
SELECT a.object, A.value1, B.value1 as value1_dup, A.value2, B.value2 as value2_dup
FROM points a, points b;
QUIT;
proc sql; create table calculation as select *, sqrt((value1 - value1_dup)**2 + (value2 - value2_dup)**2) as euklidean from kombinations; quit;
proc sql; create table object_group as select object, avg(euklidean) as avg_euklidean from calculation group by object; quit;
Подробнее здесь: https://stackoverflow.com/questions/791 ... lution-wit
Евклидово расстояние от каждой точки до любой другой точки в Python + решение с помощью proc sql ⇐ Python
Программы на Python
1731329116
Anonymous
Я хотел бы рассчитать расстояния от каждой точки до каждой другой точки в Python, и я хочу сделать это с помощью цикла.
У меня есть решение с помощью proc sql, и я попробовал его с Python, но получил разные числа .
Вот моя таблица и код расстояния от одной точки до других точек:
import pandas as pd
data = {
'object': ['A', 'B', 'C', 'D'],
'value1': [79.826732673, 78.268876611, 64.04744255, 58.866103739],
'value2': [2.7227722772, 2.7624309392, 2.8910303929, 3.6188178528]
}
df = pd.DataFrame(data)
Это должен быть результат для A
x = df0["value1"]
y = df0["value2"]
x_ref = 79.826732673
y_ref = 2.7227722772
dist = np.sqrt((x-x_ref)**2 + (y-y_ref)**2) # euklidean distance
np.mean(dist)
Когда я использую цикл для определения расстояния от каждой точки до каждой точки, я получаю неверные числа.
for i in range(0,3):
x_ref = df0.iloc[i]["value1"]
y_ref = df0.iloc[i]["value2"]
eklidean = np.sqrt((df0["value1"] - x_ref)**2 + (df0["value2"] - y_ref)**2)
eklidean
object
A 15.780187
B 14.222015
C 0.000000
D 5.232203
dtype: float64
Не могли бы вы подсказать, что я делаю неправильно в цикле?
Вот также возможное решение в SAS proc sql (без цикл):
DATA points;
INPUT object $ value1 value2;
DATALINES;
A 79.826732673 2.7227722772
B 78.268876611 2.7624309392
C 64.04744255 2.8910303929
D 58.866103739 3.6188178528
;
RUN;
PROC SQL;
CREATE TABLE kombinations AS
SELECT a.object, A.value1, B.value1 as value1_dup, A.value2, B.value2 as value2_dup
FROM points a, points b;
QUIT;
proc sql; create table calculation as select *, sqrt((value1 - value1_dup)**2 + (value2 - value2_dup)**2) as euklidean from kombinations; quit;
proc sql; create table object_group as select object, avg(euklidean) as avg_euklidean from calculation group by object; quit;
Подробнее здесь: [url]https://stackoverflow.com/questions/79177655/euklidean-distance-from-each-point-to-every-other-point-in-python-solution-wit[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия