新人 数据分析时在计算矩阵遇到的小问题 求大哥们解答

请问为什么在numpy广播中3行1列减3行47列的结果是3行1列而不是3行47列 求大神赐教

https://www.zhihu.com/question/61919551
减法是加法的逆运算。

我觉得是你的数据的shape有问题. 可能你认为的3行1列的数组实际上并不是3行1列.

下面针对题主的问题进行的实验.

In [16]: a = np.random.rand(3,1)

In [17]: a.shape
Out[17]: (3, 1)

In [18]: a = np.random.rand(3,1)

In [19]: a.shape
Out[19]: (3, 1)

In [20]: a
Out[20]: 
array([[ 0.90544021],
       [ 0.94176178],
       [ 0.22644611]])

In [21]: b = np.random.rand(3,7)

In [22]: b.shape
Out[22]: (3, 7)

In [23]: b
Out[23]: 
array([[ 0.44382308,  0.28795782,  0.63101411,  0.96780386,  0.40770587,
         0.44703094,  0.30372423],
       [ 0.45675273,  0.09796086,  0.0566005 ,  0.49264376,  0.37514837,
         0.90567161,  0.52436198],
       [ 0.35413989,  0.78893729,  0.98127371,  0.97933932,  0.27661489,
         0.29934424,  0.97276293]])

In [24]: (a-b).shape
Out[24]: (3, 7)

In [25]: a-b
Out[25]: 
array([[ 0.46161713,  0.61748239,  0.2744261 , -0.06236366,  0.49773434,
         0.45840927,  0.60171598],
       [ 0.48500904,  0.84380091,  0.88516128,  0.44911802,  0.5666134 ,
         0.03609016,  0.41739979],
       [-0.12769379, -0.56249118, -0.75482761, -0.75289322, -0.05016878,
        -0.07289813, -0.74631682]])

通过实验可以看到实际上正确广播了的.
python版本: 2.7.14+ (default, Feb 6 2018, 19:12:18) \n[GCC 7.3.0]
numpy版本: 1.21.1