【问题标题】:Create matrix with 2 arrays in numpy在 numpy 中创建具有 2 个数组的矩阵
【发布时间】:2014-10-14 21:32:56
【问题描述】:

我想在 numpy 中找到一个列向量乘以行向量等于矩阵的命令

[1,1,1,1] ^T * [ 2,3] = [[2,3],[2,3],[2,3],[2,3]]

【问题讨论】:

    标签: python arrays numpy matrix


    【解决方案1】:

    首先,让我们定义一维 numpy 数组:

    In [5]: one = np.array([ 1,1,1,1 ]); two = np.array([ 2,3 ])
    

    现在,让它们相乘:

    In [6]: one[:, np.newaxis] * two[np.newaxis, :]
    Out[6]: 
    array([[2, 3],
           [2, 3],
           [2, 3],
           [2, 3]])
    

    这使用 numpy 的 newaxis 添加适当的轴以获得 4x2 输出矩阵。

    【讨论】:

    • 在我看来,这比 TimothyShields 的方法要快
    • +1。这与np.outer(one, two) 使用的方法相同。
    【解决方案2】:

    您遇到的问题是您的两个向量既不是列向量也不是行向量 - 它们只是向量。如果您查看len(vec.shape),它就是1

    您可以做的是使用numpy.reshape 将您的列向量转换为形状(m, 1) 并将您的行向量转换为形状(1, n)

    import numpy as np
    
    colu = np.reshape(u, (u.shape[0], 1))
    rowv = np.reshape(v, (1, v.shape[0]))
    

    现在,当您将colurowv 相乘时,您将得到一个形状为(m, n) 的矩阵。

    【讨论】:

      【解决方案3】:

      如果您需要矩阵 - 使用矩阵。这样您就可以几乎逐字逐句地使用您的表达方式:

      np.matrix([1,1,1,1]).T * np.matrix([2,3])
      

      【讨论】:

      • 非常感谢,这正是我想要的表达方式
      【解决方案4】:

      您可能想使用numpy.kron(a,b) 它需要两个数组的克罗内克积。您可以将 b 向量视为一个块。该函数将此块乘以 a 向量的相应系数,放在该系数的位置上。您也可以将其用于矩阵。 对于您的示例,它看起来像:

      import numpy as np
      
      vecA = np.array([[1],[1],[1],[1]])
      vecB = np.array([2,3])
      
      Out = np.kron(vecA,vecB)
      

      返回

      >>> Out
      array([[2, 3],
             [2, 3],
             [2, 3],
             [2, 3]])
      

      希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 1970-01-01
        相关资源
        最近更新 更多