# Convert a 1D array to a 2D array in numpy

### Question

I want to convert a 1-dimensional array into a 2-dimensional array by specifying the number of columns in the 2D array. Something that would work like this:

``````> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
[3, 4],
[5, 6]])
``````

Does numpy have a function that works like my made-up function "vec2matrix"? (I understand that you can index a 1D array like a 2D array, but that isn't an option in the code I have - I need to make this conversion.)

1
86
7/18/2018 4:40:42 AM

You want to `reshape` the array.

``````B = np.reshape(A, (-1, 2))
``````
124
9/25/2012 1:44:23 PM

You have two options:

• If you no longer want the original shape, the easiest is just to assign a new shape to the array

``````a.shape = (a.size//ncols, ncols)
``````

You can switch the `a.size//ncols` by `-1` to compute the proper shape automatically. Make sure that `a.shape*a.shape=a.size`, else you'll run into some problem.

• You can get a new array with the `np.reshape` function, that works mostly like the version presented above

``````new = np.reshape(a, (-1, ncols))
``````

When it's possible, `new` will be just a view of the initial array `a`, meaning that the data are shared. In some cases, though, `new` array will be acopy instead. Note that `np.reshape` also accepts an optional keyword `order` that lets you switch from row-major C order to column-major Fortran order. `np.reshape` is the function version of the `a.reshape` method.

If you can't respect the requirement `a.shape*a.shape=a.size`, you're stuck with having to create a new array. You can use the `np.resize` function and mixing it with `np.reshape`, such as

``````>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
``````