sarbjit
sarbjit

Reputation: 3894

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]

Upvotes: 37

Views: 51825

Answers (5)

flpdu
flpdu

Reputation: 1

Try enclosing them in another bracket. It's no longer strictly "1D" as Numpy now considers that the 1st row of an editable array (sort of).

import numpy

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

Upvotes: 0

Marc Shivers
Marc Shivers

Reputation: 698

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"

Upvotes: 10

jfs
jfs

Reputation: 414139

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]])

Upvotes: 35

Sven Marnach
Sven Marnach

Reputation: 601489

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.

Upvotes: 38

vonPetrushev
vonPetrushev

Reputation: 5599

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

Upvotes: 7

Related Questions