Search code examples
pythonnumpyscipytranspose

Numpy transpose of 1D array not giving expected result


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.

a = array([1,2,3]
print a.shape
>> (3,)

b = a.transpose()
print b.shape
>> (3,)

If I print the contents of arrays "a" and "b", they are similar.

Expectation is: (which will be result in Matlab on transpose)

 [1,
  2,
  3]

Solution

  • 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.