【问题标题】:Is there a way to create column vectors in numpy without having to create a list of lists? [duplicate]有没有办法在 numpy 中创建列向量而不必创建列表列表? [复制]
【发布时间】:2018-10-13 21:43:10
【问题描述】:

假设我想将一个矩阵乘以一个向量:

[1 2 3]   [10]
[4 5 6] * [11]
[7 8 9]   [12]

在 Python 中使用 Numpy 我会这样做:

from numpy import *

A = matrix(
    [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]])

B = matrix(
    [[10], [11], [12]])

print(A * B)

不过,如您所见,为了正确定义矩阵 B,我必须输入 [[10], [11], [12]],这有点乏味。有没有什么东西只是构造一个向量,所以我可以输入vector([10, 11, 12]) 而不是matrix([[10], [11], [12]])

【问题讨论】:

    标签: python numpy linear-algebra


    【解决方案1】:

    您可以将 B 创建为 numpy 数组,然后使用方法dot

    B=np.array([10,11,12])
    print(A.dot(B)) #Use A.dot(B).T if you need to keep the original dimension
    

    【讨论】:

      【解决方案2】:

      你可以只转置矩阵:

      In [1]: import numpy as np
      
      In [2]: A = np.matrix(
         ...:     [[1, 2, 3],
         ...:      [4, 5, 6],
         ...:      [7, 8, 9]])
         ...:
      
      In [3]: B = np.matrix([10, 11, 12]).T
      
      In [4]: print(A * B)
      [[ 68]
       [167]
       [266]]
      

      【讨论】:

      • 对 OP 的说明:始终谨慎使用矩阵类。有时你认为它的行为不像数组。
      【解决方案3】:

      您还可以使用c_ 列组合对象:

      >>> np.c_[[10,11,12]]
      array([[10],
             [11],
             [12]])
      

      >>> np.c_[10:13]
      array([[10],
             [11],
             [12]])
      

      linspace语义

      >>> np.c_[10:12:3j]
      array([[10.],
             [11.],
             [12.]])
      

      【讨论】:

        【解决方案4】:

        一个简单的选择是创建一个维度为 None 的新轴:

        import numpy as np
        
        A = np.array([
            [1, 2, 3],
            [4, 5, 6],
            [7, 8, 9],
            ])
        
        B = np.array([ 10, 11, 12 ])
        
        print(A * B[:,None])
        

        【讨论】:

          【解决方案5】:

          与其他答案略有不同,但这是我的 2 美分 :)

          Python 的 zip 在这里可能会有所帮助!

          In [13]: blist = [10, 11, 12]
          
          In [14]: B = matrix(zip(blist))
          
          In [15]: print B
          [[10]
           [11]
           [12]]
          

          【讨论】:

            【解决方案6】:

            另一个选项是np.reshape:

            B = np.array([10, 11, 12]).reshape(-1, 1)
            
            >>> array([[10],
                       [11],
                       [12]])
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-08-30
              • 2019-04-24
              • 1970-01-01
              • 1970-01-01
              • 2022-01-02
              • 2023-01-12
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多