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

Numpy中计算两个2D数组行之间L2范数的高效实现方法

计算两个Numpy数组行对行L2距离的向量化实现

最优高效实现(低内存占用)

利用L2距离的代数展开公式优化计算,避免生成超大中间数组,适配你当前的数组规模:

import numpy as np

# 假设arr1为7000x100的第一个数组,arr2为4000x100的第二个数组
# 计算arr1每行的平方和,形状为 (7000,)
arr1_row_sq = np.sum(arr1 ** 2, axis=1)
# 计算arr2每行的平方和,保持维度为 (4000, 1) 适配广播规则
arr2_row_sq = np.sum(arr2 ** 2, axis=1, keepdims=True)
# 计算行点积,得到4000x7000的矩阵
cross_dot = arr2 @ arr1.T
# 代入公式计算L2距离,加maximum避免浮点数精度导致的负数开根号报错
l2_matrix = np.sqrt(np.maximum(arr2_row_sq + arr1_row_sq - 2 * cross_dot, 0))

输出l2_matrix的形状就是你需要的4000x700,l2_matrix[i][j]对应第二个数组第i行和第一个数组第j行的L2距离。

基于numpy.linalg.norm的简洁实现

如果更在意代码简洁度,也可以直接用广播配合norm方法实现,不过内存占用更高:

l2_matrix = np.linalg.norm(arr2[:, np.newaxis] - arr1, axis=-1)

实现逻辑是通过arr2[:, np.newaxis]把arr2扩展为4000x1x100的维度,和7000x100的arr1广播相减得到4000x7000x100的差值矩阵,最后对最后一个维度求L2范数得到结果。

内容的提问来源于stack exchange,提问作者DHH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:54:04