python - numpy - 不同维度的numpy数组求和

python - numpy - summation of numpy arrays of different dimension

假设我们像这样创建一个 numpy 数组:

x =  np.linspace(1,5,5).reshape(-1,1)

结果是:

array([[ 1.],
   [ 2.],
   [ 3.],
   [ 4.],
   [ 5.]])

现在我们将这个数组的转置添加到其中:

x + x.T

结果是:

array([[  2.,   3.,   4.,   5.,   6.],
   [  3.,   4.,   5.,   6.,   7.],
   [  4.,   5.,   6.,   7.,   8.],
   [  5.,   6.,   7.,   8.,   9.],
   [  6.,   7.,   8.,   9.,  10.]])

我不明白这一点,因为这两个数组的维度不同(5x1 和 1x5),而且我在线性代数中了解到,我们只能对具有相同维度的矩阵求和。

编辑:好的,谢谢,知道了

在这里,我们有

x = array([[ 1.],[ 2.],[ 3.],[ 4.],[ 5.]])
x.T = array([[ 1.,  2.,  3.,  4.,  5.]])

现在您尝试将两个不同维度的矩阵相加 (1 X 5) 和 (5 X 1)。

numpy 处理此问题的方式是,将第一个矩阵的每一行中的元素跨其列复制以匹配第二个矩阵的多列,并将第二个矩阵的每一列中的元素跨其行复制以匹配编号。第一个矩阵的行数。这给你 2 5 X 5 矩阵可以加在一起。

元素明智的加法是

array([[ 1., 1., 1., 1., 1.],[ 2., 2., 2., 2., 2.,],[ 3., 3., 3., 3., 3.,],[4., 4., 4., 4., 4.],[ 5., 5., 5., 5., 5.,]]) + array([[ 1.,  2.,  3.,  4.,  5.],[ 1.,  2.,  3.,  4.,  5.],[ 1.,  2.,  3.,  4.,  5.],[ 1.,  2.,  3.,  4.,  5.],[ 1.,  2.,  3.,  4.,  5.]])

产生结果

array([[  2.,   3.,   4.,   5.,   6.],
   [  3.,   4.,   5.,   6.,   7.],
   [  4.,   5.,   6.,   7.,   8.],
   [  5.,   6.,   7.,   8.,   9.],
   [  6.,   7.,   8.,   9.,  10.]])