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

如何向量化实现NumPy数组的逐列加权求和运算?

NumPy 向量化多列加权求和实现

数组定义

import numpy as np

a = np.array([[20, 12,  6],
              [12, 24, 18],
              [ 0, 14, 30]])
b = np.array([1, 0.5])
c = np.array([b ** i for i in range(0, 3)][::-1])
# c 的输出结果:
# array([[1.  , 0.25],
#        [1.  , 0.5 ],
#        [1.  , 1.  ]])

需求说明

当使用c的第二列时,需执行如下逐元素乘法后按列求和:

[[20*0.25, 12*0.25, 6*0.25],
 [12*0.5,  24*0.5,  18*0.5],
 [ 0*1,    14*1,    30*1]
].sum(axis=0)

需要对c的每一列都完成上述操作,已知c为一维数组时可通过(a * c[:,None]).sum(axis=0)实现,要求不使用循环,通过向量化方式完成整体运算。

解决方案

方法1:矩阵乘法(简洁高效)

直接对a的转置与c进行矩阵乘法,可一次性得到所有列的运算结果:

result = a.T @ c

执行结果:

print(result)
# 输出:
# [[32.  11. ]
#  [50.  29. ]
#  [54.  40.5]]

方法2:广播机制求和

通过扩展维度实现广播,完成逐元素乘法后沿行维度(axis=0)求和:

result = (a[:, :, None] * c[:, None, :]).sum(axis=0)

原理说明:

  • a[:, :, None] 将a从(3,3)维度扩展为(3,3,1)
  • c[:, None, :] 将c从(3,2)维度扩展为(3,1,2)
  • 两者相乘后得到(3,3,2)的数组,沿axis=0求和后得到(3,2)的最终结果,与矩阵乘法结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:22:14