【问题标题】:Numpy: How to elementwise-multiply two vectors, shape (n,1) and (n,)?Numpy:如何将两个向量相乘,形状(n,1)和(n,)?
【发布时间】:2012-03-30 17:53:01
【问题描述】:

如果两个向量都具有相同的形状,比如两个 (n,1) 或两个 (n,),则它们的元素乘法是没有问题的。但是,如果一个向量的形状为 (n,1) 而另一个为 (n,),*-运算符会返回一些有趣的东西。

a = np.ones((3,1))
b = np.ones((3,))
print a * b

生成的 nxn 矩阵包含 A_{i,j}=a_i*b_j。

那么我该如何为 ab 进行元素乘法呢?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    以使其形状匹配的方式对向量进行切片:

    a[:, 0] * b
    

    a * b[:, None]
    

    【讨论】:

    • a.reshape(-1) * ba * b.reshape((-1, 1)) 是做基本相同事情的另一种方法。 (-1 的意思是“尽可能多地使它适合这个形状。”)
    【解决方案2】:

    将第二个轴添加到b 以使ab 具有相同的尺寸:

    >>> a * b[:,np.newaxis]
    array([[ 1.],
           [ 1.],
           [ 1.]])
    

    或者,转置a 以便广播工作:

    >>> a.T * b
    array([[ 1.,  1.,  1.]])
    

    (您可能想要转置结果。)

    【讨论】:

    • 我认为.T 解决方案是最好的解决方案。它需要最少的打字和最少的思考。
    猜你喜欢
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多