【问题标题】:Compute dot product of numpy arrays (3,) and (1,)计算 numpy 数组 (3,) 和 (1,) 的点积
【发布时间】:2018-03-13 15:04:55
【问题描述】:

我想计算两个 numpy 数组之间的点积。 例如,我的数组的形状为 (3,) 和 (1,),所以从基本的数学理解来看,我应该是一个形状为 (3,1) 的向量。但是使用 numpy dot 不会得到这样的结果。一般来说,我的输入将具有 (x,n) 和 (n,x) 的大小,如果 x=1,我想获得形状 (x,x) 或标量。

【问题讨论】:

    标签: numpy dot-product


    【解决方案1】:

    这里唯一真正的问题是您使用大小为(3,)(1,) 的数组,但您应该使用(3,1)(1,1)。有了它,它的行为就完全按照你的意愿/期望:

    >>> np.dot([3, 2, 1], [1])
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: shapes (3,) and (1,) not aligned: 3 (dim 0) != 1 (dim 0)
    >>> np.dot([[3], [2], [1]], [[1]])
    array([[3],
           [2],
           [1]])
    

    对于(x, n)(n, x) 形状:

    >>> x = 5
    >>> n = 4
    >>> A = np.ones((x, n))
    >>> B = np.ones((n, x))
    >>> A.dot(B)
    array([[ 4.,  4.,  4.,  4.,  4.],
           [ 4.,  4.,  4.,  4.,  4.],
           [ 4.,  4.,  4.,  4.,  4.],
           [ 4.,  4.,  4.,  4.,  4.],
           [ 4.,  4.,  4.,  4.,  4.]])
    >>> A.dot(B).shape
    (5, 5)
    

    再次,完全如您所愿/期望。请注意,在 numpy 中,形状为 (n,) 的数组是 维数组,而形状为 (n,1) 的数组是 维数组。一维数组对于它们的操作是必要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多