仅展平数据框形状的一部分以进行欧几里得计算?

Flatten only part of a dataframe shape for Euclidean calculation?

我有一个形状为的数据框:

(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,30,1024) 转换为 (20,30720),然后计算行之间的 pdist/squareform(即 20 行向量长度 30720)。

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

但这完全拉平了我的矩阵,输出形状为 (1,614400)。

谁能告诉我如何将形状从 (20,30,1024) 转换为 (20,3072),或者如果我的方法不正确?

最终目标是计算数据集中所有非冗余对之间的欧几里德距离,但数据集很大,所以我需要像possible/not重复计算一样高效。

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

df_test.values.reshape(20, -1)

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