You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用嵌套循环计算特征向量组中所有两两组合的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:45:54