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.]
asked Sep 25, 2012 at 2:23
You want to reshape
the array.
B = np.reshape[A, [-1, 2]]
where -1
infers the size of the new dimension from the size of the input array.
nbro
14.3k27 gold badges103 silver badges188 bronze badges
answered Sep 25, 2012 at 2:27
Matt BallMatt Ball
348k98 gold badges634 silver badges699 bronze badges
0
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 thata.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 abovenew = np.reshape[a, [-1, ncols]]
When it's possible,
new
will be just a view of the initial arraya
, meaning that the data are shared. In some cases, though,new
array will be acopy instead. Note thatnp.reshape
also accepts an optional keywordorder
that lets you switch from row-major C order to column-major Fortran order.np.reshape
is the function version of thea.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]
answered Sep 25, 2012 at 8:03
Pierre GMPierre GM
19k3 gold badges54 silver badges65 bronze badges
0
Try something like:
B = np.reshape[A,[-1,ncols]]
You'll need to make sure that you can divide the number of elements in your array by ncols
though. You can also play with the order in which the numbers are pulled into B
using the order
keyword.
answered Sep 25, 2012 at 4:19
JoshAdelJoshAdel
63.7k24 gold badges138 silver badges136 bronze badges
If your sole purpose is to convert a 1d array X to a 2d array just do:
X = np.reshape[X,[1, X.size]]
answered Jan 14, 2020 at 18:09
ArunArun
6358 silver badges13 bronze badges
convert a 1-dimensional array into a 2-dimensional array by adding new axis.
a=np.array[[10,20,30,40,50,60]]
b=a[:,np.newaxis]--it will convert it to two dimension.
derloopkat
6,05115 gold badges38 silver badges43 bronze badges
answered Jan 10, 2021 at 4:38
There is a simple way as well, we can use the reshape function in a different way:
A_reshape = A.reshape[No_of_rows, No_of_columns]
Tamás Sengel
52.9k29 gold badges156 silver badges201 bronze badges
answered Jan 7, 2021 at 3:07
1
You can useflatten[]
from the numpy package.
import numpy as np
a = np.array[[[1, 2],
[3, 4],
[5, 6]]]
a_flat = a.flatten[]
print[f"original array: {a} \nflattened array = {a_flat}"]
Output:
original array: [[1 2]
[3 4]
[5 6]]
flattened array = [1 2 3 4 5 6]
answered Mar 20, 2019 at 16:19
RafiRafi
192 bronze badges
2
some_array.shape = [1,]+some_array.shape
or get a new one
another_array = numpy.reshape[some_array, [1,]+some_array.shape]
This will make dimensions +1, equals to adding a bracket on the outermost
answered Apr 18, 2020 at 2:27
ZDL-soZDL-so
3781 gold badge6 silver badges7 bronze badges
import numpy as np
array = np.arange[8]
print["Original array : \n", array]
array = np.arange[8].reshape[2, 4]
print["New array : \n", array]
Milo
3,2679 gold badges28 silver badges43 bronze badges
answered Nov 25, 2019 at 14:38
2
Change 1D array into 2D array without using Numpy.
l = [i for i in range[1,21]]
part = 3
new = []
start, end = 0, part
while end