编程语言
首页 > 编程语言> > python-将2d数组乘以1d数组

python-将2d数组乘以1d数组

作者:互联网

我有一个形状为(k,n)的2D数组a,我想将它与形状(m,)的一维数组b’相乘’:

a = np.array([[2, 8],
              [4, 7],
              [1, 2],
              [5, 2],
              [7, 4]])

b = np.array([3, 5, 5])

由于“乘法”,我正在寻找:

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

= array([[[ 6, 10, 10],
          [24, 40, 40]],

         [[12, 20, 20],
          [21, 35, 35]],

         [[ 3,  5,  5],
          [ ........ ]],

             ....... ]]])

我当然可以通过循环来解决它,但是我正在寻找一种快速的矢量化方法.

解决方法:

将a扩展到3D数组的情况,方法是在np.newaxis/None的末尾添加一个新轴,然后与b进行元素乘法,从而将broadcasting引入矢量化解决方案,如下所示-

b*a[...,None]

样品运行-

In [19]: a
Out[19]: 
array([[2, 8],
       [4, 7],
       [1, 2],
       [5, 2],
       [7, 4]])

In [20]: b
Out[20]: array([3, 5, 5])

In [21]: b*a[...,None]
Out[21]: 
array([[[ 6, 10, 10],
        [24, 40, 40]],

       [[12, 20, 20],
        [21, 35, 35]],

       [[ 3,  5,  5],
        [ 6, 10, 10]],

       [[15, 25, 25],
        [ 6, 10, 10]],

       [[21, 35, 35],
        [12, 20, 20]]])

标签:python,arrays,performance,numpy,vectorization
来源: https://codeday.me/bug/20191011/1894333.html