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

如何在Python(cuPy/Numpy)中实现行与对应列的相乘?

在NumPy/CuPy中高效实现矩阵对应行与列的运算

由于NumPy和CuPy的API几乎完全一致,以下代码可直接在两个库中切换使用(将np替换为cp即可),全程无需for循环。

场景1:计算行与对应列的点积(得到标量数组)

即对每个索引i,计算矩阵第i行与转置矩阵第i列(即原矩阵第i行的列向量形式)的点积(元素相乘后求和),推荐两种高效实现方式:

  • 逐元素相乘后按行求和
    这是性能最优的方式,仅需一次逐元素运算和行维度求和:

    import numpy as np  # 替换为import cupy as cp即可适配CuPy
    
    mat = np.array([[1,2,3], [4,5,6], [7,8,9]])
    result = (mat * mat).sum(axis=1)
    # 输出:array([14, 77, 194]),对应各行元素的平方和
    
  • 使用Einstein求和
    通过索引表达式清晰描述运算逻辑,性能与上一方法持平:

    result = np.einsum('ij,ij->i', mat, mat)
    # 或明确标注转置关系:np.einsum('ij,ji->i', mat, mat.T)
    

注意:若用np.diag(mat @ mat.T)实现,会额外计算大量冗余元素,大矩阵场景下效率较低,不推荐。

场景2:计算行与对应列的逐元素相乘(得到同维度矩阵)

若需求是将每行与对应列(即自身)逐元素相乘,直接用逐元素乘法或平方函数即可:

# 逐元素相乘
result = mat * mat
# 或用平方函数,运算效率更高
result = np.square(mat)
# 输出:
# array([[ 1,  4,  9],
#        [16, 25, 36],
#        [49, 64, 81]])

场景3:计算行与对应列的外积(得到三维张量)

若需对每个i,计算第i行与对应列的外积(得到二维矩阵),最终组成三维张量,可通过广播实现:

result = mat[:, :, np.newaxis] * mat[:, np.newaxis, :]
# 3x3矩阵的输出为3x3x3张量,其中result[i]即为第i行与对应列的外积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:35:55