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

numpy标量乘法实现原理是什么?Python原生标量与numpy数组相乘如何运行?

Numpy标量左乘的运行逻辑解答

你对Python乘法运算符默认调度逻辑的理解是对的:x * y默认会优先调用左操作数的__mul__方法,也就是x.__mul__(y),但这并不是完整的调度规则:

  • 当左操作数的__mul__方法无法处理右操作数的类型时,会返回特殊的NotImplemented常量
  • 此时Python会自动触发反向运算逻辑,调用右操作数的__rmul__方法,传入左操作数作为参数,也就是执行y.__rmul__(x)

你给出的示例代码运行流程如下:

x = 6
y = np.array([1,2])
print(x * y)
  1. 首先执行原生int类型实例6的__mul__方法,传入numpy数组作为参数。int类型的原生实现不支持和numpy数组做乘法,直接返回NotImplemented
  2. Python检测到左操作数的乘法方法返回了NotImplemented,转而调用numpy数组的__rmul__方法,传入6作为参数
  3. Numpy的ndarray类已经内置实现了__rmul__方法,逻辑和正向的标量乘数组完全一致:会把输入的标量广播到数组的每个元素对应相乘,最终输出[6 12]

Numpy就是通过实现这类反向运算符方法,实现了非numpy类型的标量在运算符左侧时,也能按照numpy的广播规则完成运算。类似的反向方法还有__radd__、__rsub__、__rtruediv__等,覆盖了所有常用二元运算符。

内容的提问来源于stack exchange,提问作者Koh Jia Hng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:05