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

Python类中numpy矩阵-向量乘法结果异常,求原因分析

问题分析与解决

问题出在乘法逻辑,和Python类的特性无关,具体原因及修正方式如下:

核心问题

  1. numpy一维数组的转置误区:你传入的vec = np.array([1, 0.0])是一维数组(shape为(2,)),numpy里一维数组没有行/列的概念,vec.T不会将其转为二维列向量,结果仍然是一维数组。
  2. 疑似运算符笔误:你得到的[[1., 0.],[2., 0.]]是逐元素乘法(*)的结果,而非矩阵乘法(@)的结果,大概率是你代码中误将@写成了*。如果代码确实是@,正常情况下self.mat_ @ vec.T应该和直接计算的[1., 2.]一致,不会出现你描述的结果。

修正方案

如果要和直接计算的结果保持一致,直接去掉多余的转置即可:

class Transform:
    mat_ = np.ones([2, 2], dtype=float)

    def __init__(self, mat):
        self.mat_ = mat

    # vec可以是一维数组或二维列向量
    def r_mult(self, vec):
        return self.mat_ @ vec

如果要严格遵循注释中“vec should be a column vector”的要求,可先将输入转为二维列向量:

class Transform:
    mat_ = np.ones([2, 2], dtype=float)

    def __init__(self, mat):
        self.mat_ = mat

    # vec should be a column vector(支持传入一维数组自动转换)
    def r_mult(self, vec):
        # 将输入转为二维列向量
        vec_col = vec.reshape(-1, 1)
        # 可选:如果需要返回一维数组,可添加.flatten()
        return self.mat_ @ vec_col

调用修正后的方法,就能得到预期的矩阵-向量乘法结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:15:13