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

关于向量成对差(Pairwise difference of vectors)的矩阵计算需求咨询

生成列向量对差的三维矩阵实现方案

需求明确

给定N×N矩阵matrix(每一列是一个N维列向量(v_1, v_2, …, v_N)),需生成一个N×N×N的三维结构,其中索引((i,j,k))对应(v_i - v_j)的第k个分量。

高效实现(Python + NumPy)

利用NumPy的广播机制可以避免嵌套循环,高效完成计算:

import numpy as np

# 构造N=3的示例矩阵(每一列对应一个N维列向量)
matrix = np.array([[1, 4, 7],
                   [2, 5, 8],
                   [3, 6, 9]])

# 将列向量转为行向量数组,方便后续广播操作
vecs = matrix.T  # vecs形状为(N,N),每行对应原矩阵的一列

# 通过广播计算所有v_i - v_j,得到N×N×N的结果
result = vecs[:, np.newaxis, :] - vecs[np.newaxis, :, :]

# 验证:result[i,j,k] = v_i的第k分量 - v_j的第k分量
print(result[0, 1, 2])  # 输出-3,对应v1[2]-v2[2] = 3-6 = -3

代码说明

  • vecs = matrix.T:转置原矩阵,将列向量转换为行向量存储,简化广播逻辑。
  • vecs[:, np.newaxis, :]:为每个行向量增加一个维度,形状变为((N,1,N)),对应所有(v_i)的扩展形式。
  • vecs[np.newaxis, :, :]:为每个行向量增加一个维度,形状变为((1,N,N)),对应所有(v_j)的扩展形式。
  • 两者相减时,NumPy自动完成广播,生成的result正好满足索引((i,j,k))的需求。

纯Python实现(无依赖)

如果不需要NumPy,用嵌套列表推导也能实现:

# 示例矩阵:matrix[i]对应第i+1个列向量v_{i+1}
matrix = [[1,2,3], [4,5,6], [7,8,9]]

# 生成三维列表
result = [[[matrix[i][k] - matrix[j][k] for k in range(len(matrix))]
           for j in range(len(matrix))]
          for i in range(len(matrix))]

# 验证
print(result[0][1][2])  # 输出-3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:10:24