如何用嵌套循环计算特征向量组中所有两两组合的Euclidean distance?
计算每行内所有特征向量两两组合的欧氏距离
数据集
team y A African Dance [[1.059685349464416, 0.328705966472625, 0.3115... Ballet [[0.486603736877441, 1.678925514221191, 0.0157... Contemporary [[0.06553386151790601, 2.121821165084839, 0, 0... B African Dance [[1.129618763923645, 0.775617241859436, 0.0577... Ballet [[1.164714455604553, 0.6662477850914, 0, 0.138... Contemporary [[0.050464563071727, 0.856616079807281, 0, 0.3...
需求
遍历每行,计算该行内所有特征向量两两组合的欧氏距离。
当前代码(仅计算相邻向量距离)
for i in range(features_vectors.size): for j in range(len(features_vectors[i])-1): fv1 = np.array(features_vectors[i][j]) fv2 = np.array(features_vectors[i][j+1]) print(np.linalg.norm(fv1 - fv2))
问题
上述代码仅能计算相邻向量间的距离,无法覆盖所有组合(比如行0的第0个向量与第2个向量的距离),如何修改嵌套循环实现需求?
修改方案
要覆盖所有两两组合,需要用双重内层循环,确保遍历到每一对不同的向量(避免重复计算同一对的距离,可采用j < k的逻辑):
修改后的代码
import numpy as np for i in range(features_vectors.size): # 获取当前行的所有特征向量 row_vectors = features_vectors[i] n = len(row_vectors) # 遍历第一个向量的索引j for j in range(n): # 遍历第二个向量的索引k,从j+1开始,避免重复计算j和k的组合 for k in range(j + 1, n): fv1 = np.array(row_vectors[j]) fv2 = np.array(row_vectors[k]) # 计算并打印欧氏距离 distance = np.linalg.norm(fv1 - fv2) print(f"行{i}中向量{j}与向量{k}的欧氏距离: {distance}")
说明
- 外层循环
i遍历每一行; - 内层第一个循环
j遍历当前行的每个向量索引; - 内层第二个循环
k从j+1开始,确保每一对向量只计算一次(比如只算j=0,k=1,不算j=1,k=0),避免冗余计算; - 如果需要计算所有有序对(包括j>k的情况),只需把
range(j+1, n)改成range(n),并增加判断if j != k即可,但通常无序组合更符合需求。
内容的提问来源于stack exchange,提问作者Behnoosh Mohammadzadeh
相关产品推荐
相关产品推荐

