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

如何对3D NumPy矩阵提取的向量做两两元素相减生成目标矩阵

NumPy实现向量两两元素相减生成差值矩阵

现有数据

首先构造示例3D NumPy矩阵:

import numpy as np
arr = np.random.random([4, 3, 4])

对矩阵执行切片取目标向量:

v = arr[:,0,0]
# 输出为 array([0.86061437, 0.26045360, 0.21532865, 0.15602922])

需求说明

需要生成二维矩阵,矩阵中每个位置(i,j)的取值为向量中第i个元素减去第j个元素,即向量每个元素和其余所有元素依次相减的结果组合,效果如下图黄色区域所示:
示例示意图

实现方法

你之前直接对一维数组取转置再相减的思路问题在于:一维NumPy数组的转置和原数组形状完全一致,不会生成列向量,直接相减只会得到逐元素差值的一维数组。只要先将向量升维为列向量,触发NumPy广播机制,即可直接得到目标差值矩阵,常用实现方式有以下三种:

  • 维度扩展广播(最简洁常用):用None(等价于np.newaxis)给向量增加一个长度为1的维度再做减法
    diff_matrix = v[:, None] - v
    
  • reshape升维:通过reshape将一维向量转为列向量再做减法
    diff_matrix = v.reshape(-1, 1) - v
    
  • ufunc外运算:直接调用减法通用函数的outer方法,计算所有两两组合的差值
    diff_matrix = np.subtract.outer(v, v)
    

以上三种写法得到的结果完全一致,针对示例中的v,输出结果为:

array([[ 0.        ,  0.60016077,  0.64528572,  0.70458515],
       [-0.60016077,  0.        ,  0.04512495,  0.10442438],
       [-0.64528572, -0.04512495,  0.        ,  0.05929943],
       [-0.70458515, -0.10442438, -0.05929943,  0.        ]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:45:35