Python 将矩阵数组与向量相乘

Python 将矩阵数组与向量相乘,python,arrays,numpy,Python,Arrays,Numpy,我有一个矩阵数组,我想用不同的数字乘以每个矩阵。我这样试过: >>> import numpy as np >>> c = np.array([[[1, 2],[3, 4]],[[1, 2],[3, 4]]]) >>> d = np.array([0.1, 0.2]) >>> d*c array([[[ 0.1, 0.4], [ 0.3, 0.8]], [[ 0.1, 0.4],

我有一个矩阵数组,我想用不同的数字乘以每个矩阵。我这样试过:

>>> import numpy as np
>>> c = np.array([[[1, 2],[3, 4]],[[1, 2],[3, 4]]])
>>> d = np.array([0.1, 0.2])
>>> d*c
array([[[ 0.1,  0.4],
        [ 0.3,  0.8]],

       [[ 0.1,  0.4],
        [ 0.3,  0.8]]])
而我的目的就是要得到这个结果-

>>> np.array([d[0]*c[0], d[1]*c[1]])
array([[[ 0.1,  0.2],
        [ 0.3,  0.4]],

       [[ 0.2,  0.4],
        [ 0.6,  0.8]]])

最简单的方法是什么?

您需要一对额外的轴:

In [22]: d[:,None,None] * c
Out[22]: 
array([[[ 0.1,  0.2],
        [ 0.3,  0.4]],

       [[ 0.2,  0.4],
        [ 0.6,  0.8]]])

d[:,None,None]
具有形状
(2,1,1)
,该形状在
c
形状
(2,2,2)
数组中广播。要将
c
的每个块乘以
d
的相应元素,可以通过正常广播执行此操作:

>>> c*d[:, np.newaxis, np.newaxis]
array([[[ 0.1,  0.2],
    [ 0.3,  0.4]],

   [[ 0.2,  0.4],
    [ 0.6,  0.8]]])

这个方法和
d[:,np.newaxis,np.newaxis]
之间的区别是什么?@Ohm无区别-
np.newaxis无
返回
True
np.newaxis
只是
的一个更明确的同义词,在这里意味着“插入另一个轴”。