首页 > 解决方案 > 矩阵的平均值乘以标量向量

问题描述

>>> a = np.arange(9)
>>> a.shape = (3,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> b = np.array([1,2,3,4])
>>> b
array([1, 2, 3, 4])
>>> c = np.empty((4,3,3))
>>> for i in range(len(c)):
...     c[i] = a*b[i]
... 
>>> c
array([[[ 0.,  1.,  2.],
        [ 3.,  4.,  5.],
        [ 6.,  7.,  8.]],

       [[ 0.,  2.,  4.],
        [ 6.,  8., 10.],
        [12., 14., 16.]],

       [[ 0.,  3.,  6.],
        [ 9., 12., 15.],
        [18., 21., 24.]],

       [[ 0.,  4.,  8.],
        [12., 16., 20.],
        [24., 28., 32.]]])
>>> np.mean(c,axis=0)
array([[ 0. ,  2.5,  5. ],
       [ 7.5, 10. , 12.5],
       [15. , 17.5, 20. ]])

我有一个矩阵a和一个标量向量b。我想得到矩阵的平均值乘以标量向量。现在我必须构造 ac 作为中间变量。有没有更好的方法来做到这一点?

标签: pythonarraysnumpy

解决方案


以上等价于乘以a均值b事实上,我们可以简单地将其定义为:

>>> a * np.mean(b)
array([[ 0. ,  2.5,  5. ],
       [ 7.5, 10. , 12.5],
       [15. , 17.5, 20. ]])

这是有效的,因为您每次都在这里将子矩阵定义为. 如果你以后计算平均值,那么我们就知道了。但由于不依赖于,因此我们可以将其重写为,从而获得 的均值。ckck=a×bkdcdij=∑k aij×bk/naijkdij=aij×∑k bk/nb


推荐阅读