## Question

Asked By – Amelio Vazquez-Reina

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?

**Now we will see solution for issue: From ND to 1D arrays **

## Answer

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]
```

This question is answered By – unutbu

**This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 **