37

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.

3 Answers 3

40

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)
Sign up to request clarification or add additional context in comments.

Comments

6

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.

2 Comments

.flatten returns a copy, not a view, so it should generally not be your first option.
@Jaime: thanks, I've noted it. (And +1 to Ophion for pointing out .ravel...clearly I don't use NumPy enough.)
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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.