Python For循环以迭代该操作
df: 1对夫妇的计算距离Python For循环以迭代该操作,python,pandas,loops,for-loop,Python,Pandas,Loops,For Loop,df: 1对夫妇的计算距离 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 期望输出: 整个数据集的for循环过程相同 x = df['3'] y = df['3.1'] P = n
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
期望输出:
整个数据集的for循环过程相同
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]
从[0]
到all,然后到[1]
到all等等。
最后,我应该得到一个对角线为0
s`的矩阵
我试过:
distance from a['0'], a['0']is 0
from a['0'], a['1'] is 0.234 (some number)
from a['0'], a['2'] is .. ...
但是在
[3]
和[4]
之间获得相同的距离值,我不能完全确定您想要做什么。。但根据您计算第一个的方式,这里有一个可能的解决方案:
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]))
输出:
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)
因此,Q/P值总是使用n和n+0.1的数组计算,然后计算x和x+1之间的距离?似乎可行,但为什么矩阵的大小是4到4?即使I
m将大小更改为1000x1000 I
m仍然获得4x4值您有8个值。然后将它们分组为成对数组,这意味着有4个数组。然后你穿过阵列,所以4 x 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. ]]