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.)
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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.
Method 2
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//ncolsby-1to 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.reshapefunction, that works mostly like the version presented abovenew = np.reshape(a, (-1, ncols))
When it’s possible,
newwill be just a view of the initial arraya, meaning that the data are shared. In some cases, though,newarray will be acopy instead. Note thatnp.reshapealso accepts an optional keywordorderthat lets you switch from row-major C order to column-major Fortran order.np.reshapeis the function version of thea.reshapemethod.
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)
Method 3
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.
Method 4
If your sole purpose is to convert a 1d array X to a 2d array just do:
X = np.reshape(X,(1, X.size))
Method 5
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.
Method 6
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)
Method 7
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]
Method 8
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
Method 9
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)
Method 10
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 <= len(l):
temp = []
for i in range(start, end):
temp.append(l[i])
new.append(temp)
start += part
end += part
print("new values: ", new)
# for uneven cases
temp = []
while start < len(l):
temp.append(l[start])
start += 1
new.append(temp)
print("new values for uneven cases: ", new)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0