python - For循环迭代操作
问题描述
import numpy as np
import pandas as pd
from scipy.spatial.distance import directed_hausdorff
东风:
1 1.1 2 2.1 3 3.1 4 4.1
45.13 7.98 45.10 7.75 45.16 7.73 NaN NaN
45.35 7.29 45.05 7.68 45.03 7.96 45.05 7.65
1对夫妇的计算距离
x = df['3']
y = df['3.1']
P = np.array([x, y])
q = df['4']
w = df['4.1']
Q = np.array([q, w])
Q_final = list(zip(Q[0], Q[1]))
P_final = list(zip(P[0], P[1]))
directed_hausdorff(P_final, Q_final)[0]
期望的输出:
与整个数据集的 for 循环相同的过程
distance from a['0'], a['0']is 0
from a['0'], a['1'] is 0.234 (some number)
from a['0'], a['2'] is .. ...
从[0]
到全部,然后到[1]
全部等等。最后我应该得到一个对角线有0
s`的矩阵
我努力了:
space = list(df.index)
dist = []
for j in space:
for k in space:
if k != j:
dist.append((j, k, directed_hausdorff(P_final, Q_final)[0]))
[3]
但是在和之间获得相同的距离值[4]
解决方案
我不完全确定您要做什么..但是根据您计算第一个的方式,这是一个可能的解决方案:
import pandas as pd
import numpy as np
from scipy.spatial.distance import directed_hausdorff
df = pd.read_csv('something.csv')
groupby = lambda l, n: [tuple(l[i:i+n]) for i in range(0, len(l), n)]
values = groupby(df.columns.values, 2)
matrix = np.zeros((4, 4))
for Ps in values:
x = df[str(Ps[0])]
y = df[str(Ps[1])]
P = np.array([x, y])
for Qs in values:
q = df[str(Qs[0])]
w = df[str(Qs[1])]
Q = np.array([q, w])
Q_final = list(zip(Q[0], Q[1]))
P_final = list(zip(P[0], P[1]))
matrix[values.index(Ps), values.index(Qs)] = directed_hausdorff(P_final, Q_final)[0]
print(matrix)
输出:
[[0. 0.49203658 0.47927028 0.46861498]
[0.31048349 0. 0.12083046 0.1118034 ]
[0.25179357 0.22135944 0. 0.31064449]
[0.33955854 0.03 0.13601471 0. ]]
推荐阅读
- python-3.x - “找不到该进程类型(Web)”,但我在我的 Procfile 中定义了一个 Web 进程
- c# - Linq 在日期内获取值没有带来正确的值
- plantuml - PlantUML 基本示例
- android-studio - 在原始文件夹中添加视频时在 android studio 中显示错误
- python - 带有 new_values 的 Forloop
- ruby - 如何在Ruby中以不同的编码保存文件
- database - 如何在 laravel 中建立用户与用户的关系?
- python - Python中封装方法代码的输出混淆
- mysql - 为什么我的函数在 MySQL 中没有按预期工作?
- c# - ASP .Net Core – 多态 DTO