将矩阵数组与向量相乘

3

我有一个矩阵数组,我想用不同的数字乘以每个矩阵。 我尝试了以下方法:

>>> 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]]])

什么是最符合NumPy的方法来实现它?
2个回答

3

您需要额外的一些轴:

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),它被传播到形状为(2,2,2)的数组c上,以将c的每个块乘以相应元素的d


这个方法和 d[:, np.newaxis, np.newaxis] 有区别吗? - Ohm
1
@Ohm 没有区别 - np.newaxis is None 返回 True: np.newaxis 只是 None 的更明确的同义词,在这个上下文中意味着“在这里插入另一个轴”。 - xnx

2
您可以使用普通广播来完成此操作:
>>> c*d[:, np.newaxis, np.newaxis]
array([[[ 0.1,  0.2],
    [ 0.3,  0.4]],

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接