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.)

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[0]*a.shape[1]=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[0]*a.shape[1]=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)
```

Licensed under: CC-BY-SA with attribution

Not affiliated with: Stack Overflow