How to convert ndarray to array?
Question:
I’m using pandas.Series and np.ndarray.
The code is like this
>>> t
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> pandas.Series(t)
Exception: Data must be 1-dimensional
>>>
And I trie to convert it into 1-dimensional array:
>>> tt = t.reshape((1,-1))
>>> tt
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
tt is still multi-dimensional since there are double ‘[‘.
So how do I get a really convert ndarray into array?
After searching, it says they are the same. However in my situation, they are not working the same.
Answers:
Use .flatten
:
>>> np.zeros((3,3))
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> _.flatten()
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0.])
EDIT: As pointed out, this returns a copy of the input in every case. To avoid the copy, use .ravel
as suggested by @Ophion.
An alternative is to use np.ravel:
>>> np.zeros((3,3)).ravel()
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0.])
The importance of ravel
over flatten
is ravel
only copies data if necessary and usually returns a view, while flatten
will always return a copy of the data.
To use reshape to flatten the array:
tt = t.reshape(-1)
tt = array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
oneDvector = tt.A1
This is the only approach which solved the problem of double brackets, that is conversion to 1D array that nd matrix.
I’m using pandas.Series and np.ndarray.
The code is like this
>>> t
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> pandas.Series(t)
Exception: Data must be 1-dimensional
>>>
And I trie to convert it into 1-dimensional array:
>>> tt = t.reshape((1,-1))
>>> tt
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
tt is still multi-dimensional since there are double ‘[‘.
So how do I get a really convert ndarray into array?
After searching, it says they are the same. However in my situation, they are not working the same.
Use .flatten
:
>>> np.zeros((3,3))
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> _.flatten()
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0.])
EDIT: As pointed out, this returns a copy of the input in every case. To avoid the copy, use .ravel
as suggested by @Ophion.
An alternative is to use np.ravel:
>>> np.zeros((3,3)).ravel()
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0.])
The importance of ravel
over flatten
is ravel
only copies data if necessary and usually returns a view, while flatten
will always return a copy of the data.
To use reshape to flatten the array:
tt = t.reshape(-1)
tt = array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
oneDvector = tt.A1
This is the only approach which solved the problem of double brackets, that is conversion to 1D array that nd matrix.