Numpy transpose of 1D array not giving expected result

前端 未结 4 1523
暗喜
暗喜 2020-12-05 18:20

I am trying a very basic example in Python scipy module for transpose() method but it\'s not giving expected result. I am using Ipython with pylab mode.

相关标签:
4条回答
  • 2020-12-05 18:28

    A more concise way to reshape a 1D array into a 2D array is:

    a = np.array([1,2,3]),  a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))
    

    The -1 in the shape vector means "fill in whatever number makes this work"

    0 讨论(0)
  • 2020-12-05 18:31

    NumPy's transpose() effectively reverses the shape of an array. If the array is one-dimensional, this means it has no effect.

    In NumPy, the arrays

    array([1, 2, 3])
    

    and

    array([1,
           2,
           3])
    

    are actually the same – they only differ in whitespace. What you probably want are the corresponding two-dimensional arrays, for which transpose() would work fine. Also consider using NumPy's matrix type:

    In [1]: numpy.matrix([1, 2, 3])
    Out[1]: matrix([[1, 2, 3]])
    
    In [2]: numpy.matrix([1, 2, 3]).T
    Out[2]: 
    matrix([[1],
            [2],
            [3]])
    

    Note that for most applications, the plain one-dimensional array would work fine as both a row or column vector, but when coming from Matlab, you might prefer using numpy.matrix.

    0 讨论(0)
  • 2020-12-05 18:33

    Transpose is a noop for one-dimensional arrays.

    Add new axis and transpose:

    >>> a[None].T
    array([[1],
           [2],
           [3]])
    >>> np.newaxis is None
    True
    

    Or reshape:

    >>> a.reshape(a.shape+(1,))
    array([[1],
           [2],
           [3]])
    

    Or as @Sven Marnach suggested in comments, add new axis at the end:

    >>> a[:,None]
    array([[1],
           [2],
           [3]])
    
    0 讨论(0)
  • 2020-12-05 18:48

    You should try: a = array([[1,2,3]]) or a = array([[1],[2],[3]]) , that is, a should be a matrix (row vector, column vector).

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