只展平数据帧形状的一部分以进行欧几里得计算



我有一个形状为的数据帧

(20,30,1024)

我想找到数据帧中每个条目和其他条目之间的欧几里得距离(理想情况下是非冗余的,即不要找到第1行和第5行的距离……然后是第5行和第1行,但还没有(。我有这个代码:

from scipy.spatial.distance import pdist,squareform
distances = pdist(df_test,metric='euclidean')
dist_matrix = squareform(distances)
print(dist_matrix)

错误显示:

A 2-dimensional array must be passed.

因此,我想我想将矩阵从形状(20,301024(转换为(2030720(,然后计算行之间的pdist/squareform(即长度为30720的20行向量(。

我知道我可以使用test_df[0:20].flatten().tolist()

但这完全压平了我的矩阵,输出形状是(1614400(。

有人能告诉我如何将形状从(20,301024(转换为(203072(吗?或者如果我没有正确的方法?

最终目标是计算数据集中所有非冗余对之间的欧几里得距离,但数据集很大,所以我需要尽可能高效地进行计算/不重复计算。

根据您对问题的描述,我能想到的最直接的重塑方法是:

df_test.values.reshape(20, -1)

通过调用.values,您将以numpy数组的形式检索数据帧数据。从那里,.reshape完成了您的工作。由于你需要一个2D数组,你提供了第一个维度的大小(在你的情况下,20(,通过传递-1 Numpy将为你计算第二个维度的尺寸(在这种情况下,它将乘以原始3D数组中的剩余维度大小(

最新更新