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

为什么我的代码中numpy.dot()返回matrix而非预期的array?

问题原因分析

核心原因是你的theta变量实际类型是numpy.matrix,而非numpy.ndarray——哪怕它的形状显示为(2,1),类型差异才是导致结果类型不同的关键。

具体逻辑:

当np.dot接收的两个操作数一个是ndarray(你的point_是(2,)的一维数组)、一个是matrix时,numpy会遵循类型优先规则,返回matrix类型的结果,也就是你看到的(1,1)矩阵。

而你单独测试时,应该是把theta也定义成了ndarray(比如np.array([[1],[2]])),此时两个操作数都是ndarray,np.dot自然返回ndarray类型的结果。

验证方法:

直接打印theta的类型和具体形态:

print(type(theta))
print(theta)

如果是numpy.matrix,输出会是类似:

<class 'numpy.matrix'>
matrix([[a],
        [b]])

而ndarray的输出是:

<class 'numpy.ndarray'>
array([[a],
       [b]])

解决办法:

  1. 转换theta为ndarray:
    在计算前把theta转成数组类型,后续点积结果就会是ndarray:
    theta = np.asarray(theta)
    result = np.dot(point_, theta)  # 结果是形状(1,)的ndarray
    
  2. 使用@运算符替代np.dot:
    numpy的@运算符(矩阵乘法运算符)对混合类型的处理更统一,无论theta是matrix还是ndarray,都会返回ndarray:
    result = point_ @ theta  # 结果是形状(1,)的ndarray
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:44:53