Reputation: 3894
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
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
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
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
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
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