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]
Best Answer
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]).TOut[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
.
Transpose is a noop for one-dimensional arrays.
Add new axis and transpose:
>>> a[None].Tarray([[1],[2],[3]])>>> np.newaxis is NoneTrue
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]])
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"
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).
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 numpya = numpy.array([[1, 2, 3]])print(numpy.transpose(a))>> [[1][2][3]]