Python: Differentiating between row and column vectors

前端 未结 12 1532
不知归路
不知归路 2020-12-07 08:56

Is there a good way of differentiating between row and column vectors in python? So far I\'m using numpy and scipy and what I see so far is that If I was to give one a vecto

相关标签:
12条回答
  • 2020-12-07 09:19

    If I want a 1x3 array, or 3x1 array:

    import numpy as np
    row_arr = np.array([1,2,3]).reshape((1,3))
    col_arr = np.array([1,2,3]).reshape((3,1)))
    

    Check your work:

    row_arr.shape  #returns (1,3)
    col_arr.shape  #returns (3,1)
    

    I found a lot of answers here are helpful, but much too complicated for me. In practice I come back to shape and reshape and the code is readable: very simple and explicit.

    0 讨论(0)
  • 2020-12-07 09:21

    The vector you are creating is neither row nor column. It actually has 1 dimension only. You can verify that by

    • checking the number of dimensions myvector.ndim which is 1
    • checking the myvector.shape, which is (3,) (a tuple with one element only). For a row vector is should be (1, 3), and for a column (3, 1)

    Two ways to handle this

    • create an actual row or column vector
    • reshape your current one

    You can explicitly create a row or column

    row = np.array([    # one row with 3 elements
       [1, 2, 3]
    ]
    column = np.array([  # 3 rows, with 1 element each
        [1],
        [2],
        [3]
    ])
    

    or, with a shortcut

    row = np.r_['r', [1,2,3]]     # shape: (1, 3)
    column = np.r_['c', [1,2,3]]  # shape: (3,1)
    

    Alternatively, you can reshape it to (1, n) for row, or (n, 1) for column

    row = my_vector.reshape(1, -1)
    column = my_vector.reshape(-1, 1)
    

    where the -1 automatically finds the value of n.

    0 讨论(0)
  • 2020-12-07 09:21

    Here's another intuitive way. Suppose we have:

    >>> a = np.array([1, 3, 4])
    >>> a
    array([1, 3, 4])
    

    First we make a 2D array with that as the only row:

    >>> a = np.array([a])
    >>> a
    array([[1, 3, 4]])
    

    Then we can transpose it:

    >>> a.T
    array([[1],
           [3],
           [4]])
    
    0 讨论(0)
  • 2020-12-07 09:22

    row vectors are (1,0) tensor, vectors are (0, 1) tensor. if using v = np.array([[1,2,3]]), v become (0,2) tensor. Sorry, i am confused.

    0 讨论(0)
  • 2020-12-07 09:24

    You can make the distinction explicit by adding another dimension to the array.

    >>> a = np.array([1, 2, 3])
    >>> a
    array([1, 2, 3])
    >>> a.transpose()
    array([1, 2, 3])
    >>> a.dot(a.transpose())
    14
    

    Now force it to be a column vector:

    >>> a.shape = (3,1)
    >>> a
    array([[1],
           [2],
           [3]])
    >>> a.transpose()
    array([[1, 2, 3]])
    >>> a.dot(a.transpose())
    array([[1, 2, 3],
           [2, 4, 6],
           [3, 6, 9]])
    

    Another option is to use np.newaxis when you want to make the distinction:

    >>> a = np.array([1, 2, 3])
    >>> a
    array([1, 2, 3])
    >>> a[:, np.newaxis]
    array([[1],
           [2],
           [3]])
    >>> a[np.newaxis, :]
    array([[1, 2, 3]])
    
    0 讨论(0)
  • 2020-12-07 09:24

    The excellent Pandas library adds features to numpy that make these kinds of operations more intuitive IMO. For example:

    import numpy as np
    import pandas as pd
    
    # column
    df = pd.DataFrame([1,2,3])
    
    # row
    df2 = pd.DataFrame([[1,2,3]])
    

    You can even define a DataFrame and make a spreadsheet-like pivot table.

    0 讨论(0)
提交回复
热议问题