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

Python中为numpy array动态添加vdot方法报错原因咨询

问题解答

错误原因

  1. 你尝试挂载方法的对象np.array是用于生成numpy数组的内置工厂函数,并非numpy数组对应的类,就算你能成功给它加属性,也不会对实际生成的数组实例生效。
  2. 额外的:np.array属于Python内置实现的函数对象,默认不允许动态添加自定义属性,这也是你执行赋值语句时直接抛出错误的直接原因。

而之前对np.matrix操作能生效的原因是:np.matrix本身就是矩阵实例对应的Python层面可修改的类,为类挂载方法会自动对所有该类的实例生效。

解决方法

将你挂载方法的代码修改为给numpy数组的实际类np.ndarray挂载即可:

def vdot(self, other):
    return np.sum(self@other, axis=0)

# 正确写法:给ndarray类加方法
np.ndarray.vdot = vdot

修改后你原来的调用代码就可以正常运行,输出你预期的3倍2×2单位矩阵。

额外注意

  • 这种直接修改内置类原型的方式存在兼容性风险,容易和其他库的自定义方法、numpy未来新增的内置方法产生命名冲突,非特殊场景更推荐直接调用独立的vdot函数。
  • 如果需要大量自定义数组方法,更稳妥的方案是子类化np.ndarray实现自己的数组类,避免污染全局的numpy类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:54:05