【问题标题】:How to multiply two vector and get a matrix?如何将两个向量相乘并得到一个矩阵?
【发布时间】:2015-04-19 03:22:28
【问题描述】:

在 numpy 操作中,我有两个向量,假设向量 A 是 4X1,向量 B 是 1X5,如果我做 AXB,它应该得到一个大小为 4X5 的矩阵。

但我尝试了很多次,做了很多种 reshape 和 transpose,它们要么引发错误,说未对齐,要么返回单个值。

我应该如何得到我想要的矩阵的输出乘积?

【问题讨论】:

    标签: python numpy matrix vector matrix-multiplication


    【解决方案1】:

    只要向量的形状正确,正规矩阵乘法就可以工作。请记住,Numpy 中的* 是元素乘法,而矩阵乘法可用于numpy.dot()(或@ 运算符,在Python 3.5 中)

    >>> numpy.dot(numpy.array([[1], [2]]), numpy.array([[3, 4]]))
    array([[3, 4],
           [6, 8]])
    

    这被称为“外部产品”。您可以使用numpy.outer() 使用普通向量来获取它:

    >>> numpy.outer(numpy.array([1, 2]), numpy.array([3, 4]))
    array([[3, 4],
           [6, 8]])
    

    【讨论】:

      【解决方案2】:

      如果你使用的是 numpy。

      首先,确保您有两个向量。例如vec1.shape = (10, )和vec2.shape = (26, );在numpy中,行向量和列向量是一回事。

      其次,你做res_matrix = vec1.reshape(10, 1) @ vec2.reshape(1, 26) ;。

      最后,你应该有:res_matrix.shape = (10, 26)。

      numpy 文档说它将弃用 np.matrix(),所以最好不要使用它。

      【讨论】:

        【解决方案3】:

        函数matmul(从 numpy 1.10.1 开始)工作正常:

        import numpy as np
        
        a = np.array([[1],[2],[3],[4]])
        b = np.array([[1,1,1,1,1],])
        
        ab = np.matmul(a, b)
        print (ab)
        print(ab.shape)
        

        你必须正确声明你的向量。第一个必须是一个数字列表的列表(这个向量必须在一行中有列),第二个 - 一个列表列表(这个向量必须在一列中有行),如上例所示。

        输出:

        [[1 1 1 1 1]
         [2 2 2 2 2]
         [3 3 3 3 3]
         [4 4 4 4 4]]
        
        (4, 5)
        

        【讨论】:

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