计算TSV文件中所有其他点之间的距离?

时间:2018-07-11 17:14:01

标签: python python-2.7 pandas numpy math

我有一个包含n个数据点的TSV文件,我想计算所有点之间的距离。我有这样的东西:

TSV example

我想到的是.iloc功能

import pandas as pd
x = pd.read_csv('data.tsv', sep='\t')
print (x)

while True: xcord= (int)

我在想,您可以在每个点上加1的方式进行迭代,但是我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

使用 P = net.forward(x) p = torch.nn.functional.softmax(P, dim=1) loss = torch.nn.functional.cross_entropy(P, y)

的解决方案

您可以继续使用scipy.spatial.distance_matrix

假设您的DataFrame为distance_matrix

my_dataframe

可视化结果

我们可以使用seabord.heatmap可视化获得的结果:

import pandas as pd
import scipy as sp    

points = pd.DataFrame(my_dataframe, columns=["X", "Y", "Z"]).astype(float)
distance_matrix = sp.spatial.distance_matrix(points, points)

结果是:

enter image description here

一个简短的文本示例

我们可以创建一个小的文本示例,以帮助您逐步了解输入和输出。让我们考虑一个只有两点的DataFrame:

生成示例数据框

from matplotlib import pyplot as plt
import seaborn as sns

labels = my_dataframe["points"]

plt.rcParams['figure.figsize'] = [10, 10]
plt.axis('scaled')
sns.heatmap(distance_matrix,
        annot=True,
        cbar = False,
        fmt="0.2f",
        cmap="YlGnBu",
        xticklabels=labels,
        yticklabels=labels)
plt.title("Distance matrix")

我们生成的DataFrame如下:

Example DataFrame

分割点和标签

我们将标签和点分开:

import pandas as pd
import numpy as np

a = np.random.uniform(100, size=(2, 3))
my_dataframe = pd.DataFrame(np.hstack([[["A"], ["B"]], a]), columns=["points", "X", "Y", "Z"])

所以points = pd.DataFrame(my_dataframe, columns=["X", "Y", "Z"]).astype(float) labels = my_dataframe["points"] 看起来像:

Points

points如下:

Labels

计算距离矩阵

现在,我们可以继续执行labels来计算距离矩阵:

scipy.spatial.distance_matrix

结果矩阵为:

distance_matrix = sp.spatial.distance_matrix(points, points)    

可视化获得的矩阵

使用与上面相同的代码,我们获得:

Small distance matrix