首页 > 解决方案 > 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]全部等等。最后我应该得到一个对角线有0s`的矩阵

我努力了:

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]

标签: pythonpandasloopsfor-loop

解决方案


我不完全确定您要做什么..但是根据您计算第一个的方式,这是一个可能的解决方案:

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.        ]]

推荐阅读