["python","numpy"]
From ND to 1D arrays

Say I have an array a: a = np.array([[1,2,3], [4,5,6]]) array([[1, 2, 3], [4, 5, 6]]) I would like to convert it to a 1D array (i.e. a column vector): b = np.reshape(a, (1,np.product(a.shape))) but this returns array([[1, 2, 3, 4, 5, 6]]) which is not the same as: array([1, 2, 3, 4, 5, 6]) I can take the first element of this array to manually convert it to a 1D array: b = np.reshape(a, (1,np.product(a.shape)))[0] but this requires me to know how many dimensions the original array has (and concatenate [0]'s when working with higher dimensions) Is there a dimensions-independent way of getting a column/row vector from an arbitrary ndarray?
Use np.ravel (for a 1D view) or np.ndarray.flatten (for a 1D copy) or np.ndarray.flat (for an 1D iterator): In [12]: a = np.array([[1,2,3], [4,5,6]]) In [13]: b = a.ravel() In [14]: b Out[14]: array([1, 2, 3, 4, 5, 6]) Note that ravel() returns a view of a when possible. So modifying b also modifies a. ravel() returns a view when the 1D elements are contiguous in memory, but would return a copy if, for example, a were made from slicing another array using a non-unit step size (e.g. a = x[::2]). If you want a copy rather than a view, use In [15]: c = a.flatten() If you just want an iterator, use np.ndarray.flat: In [20]: d = a.flat In [21]: d Out[21]: <numpy.flatiter object at 0x8ec2068> In [22]: list(d) Out[22]: [1, 2, 3, 4, 5, 6]