【问题标题】:Vector * Vector (Matrix multiplication)向量 * 向量(矩阵乘法)
【发布时间】:2020-10-29 16:37:16
【问题描述】:

我想用一个向量做以下事情。

a = np.array(np.arange(0, 4, 1))

我想得到一个乘法,结果是一个矩阵

 | 0  1  2  3  4
-| - - - - - - - 
0| 0  0  0  0  0
1| 0  1  2  3  4
2| 0  2  4  6  8
3| 0  3  6  9 12
4| 0  4  8 12 16

我总是得到一个标量:

a*a
a.dot(a)
a.T*a
a*a.T
a.T.dot(a)
a.dot(a.T)
a.transpose()*a

【问题讨论】:

  • T,转置轴。 a 是 1d。形状 (5,)。 a.T 确实改变了一切!
  • np.arange(...) 产生一个数组。无需将其包装在另一个 np.array 调用中。

标签: python numpy


【解决方案1】:

一个更好的解决方案将是

a = np.array([np.arange(0, 4, 1)])
a*a.T
array([[0, 0, 0, 0],
       [0, 1, 2, 3],
       [0, 2, 4, 6],
       [0, 3, 6, 9]])

【讨论】:

    【解决方案2】:

    Convert NumPy vector to 2D array / matrix

    >>> a = a[:,np.newaxis]                                                                                                                       
    >>> a * a.T                                                                                                                                   
    array([[0, 0, 0, 0],
           [0, 1, 2, 3],
           [0, 2, 4, 6],
           [0, 3, 6, 9]])
    

    【讨论】:

    • 或者只是a[:, np.newaxis] * anp.outer(a,a) 是另一种选择。
    猜你喜欢
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 2016-01-23
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多