Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python For循环以迭代该操作_Python_Pandas_Loops_For Loop - Fatal编程技术网

Python For循环以迭代该操作

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

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