【问题标题】:Matrix substraction in Python error or confusionPython中的矩阵减法错误或混淆
【发布时间】:2021-07-18 05:56:33
【问题描述】:

我有这段代码可以帮助理解问题

hypotesisResult = (hypotesis(dataset, theta_init))
print(dataset.T.shape)
print(hypotesisResult.shape)
print(y.shape)
print((hypotesisResult - y).shape)
print(np.subtract(hypotesisResult, y).shape)

还有这个的输出:

(7, 1329)
(1329, 1)
(1329,1)
(1329, 1329)
(1329, 1329)

我的问题是,为什么如果 a 的矩阵 "hypotesisResult" 的大小为 (1329, 1),并且我从中减去 "y" (1329,1),它会得到 (1329,第1329章我做错了什么?我想要一个 (1329, 1) 的新矩阵,这就像一个标量减法

【问题讨论】:

  • 结果形状表明其中一个数组是 (1329,) 或 (1,1329)

标签: python python-3.x numpy machine-learning


【解决方案1】:

我不相信您显示的形状。重新运行此脚本并检查 dtype 可能会更好。

这是我期望的行为,涉及 (n,1) 和 (n,) 或 (1,n) 数组:

In [605]: x=np.ones((4,1),int); y=np.ones((4,),int)
In [606]: x,y
Out[606]: 
(array([[1],
        [1],
        [1],
        [1]]),
 array([1, 1, 1, 1]))
In [607]: x-y
Out[607]: 
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])
In [608]: x-y[None,:]
Out[608]: 
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])
In [609]: x-y[:,None]
Out[609]: 
array([[0],
       [0],
       [0],
       [0]])
In [610]: x.T-y
Out[610]: array([[0, 0, 0, 0]])

两个基本的广播规则是:

  • 如果需要,添加前导尺寸 1 尺寸以匹配尺寸数量

  • 调整 size 1 尺寸以匹配其他数组。

【讨论】:

    【解决方案2】:

    嘿,这不是你的答案,但我有一些很酷的东西要给你

    考虑一个保存在列表中的矩阵

    matx = [[1,54,2],[5,2,3],[2,23,4]]
    

    所以如果我们需要计算它的转置,我们可以使用zip()函数

    print(zip(matx))
    

    结果:-

    >>>[(1,5,2),(54,2,23),(2,3,4)]
    

    希望你喜欢这个

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 2019-10-15
      • 2015-09-18
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2018-10-02
      相关资源
      最近更新 更多