I have a very large array with size (5, n), I want to build an array with size (1,20) from it in each iteration. I have to use a very basic approach to build my new array.
Here is an example:
A = np.array(
[[4, 2, 1, 4, 0, 1, 3, 2, 4, 4],
[4, 2, 0, 3, 1, 1, 4, 2, 2, 1],
[3, 2, 3, 2, 0, 3, 4, 1, 4, 3],
[1, 1, 1, 3, 1, 1, 3, 0, 2, 2],
[3, 3, 4, 1, 4, 1, 0, 1, 0, 2]])
I want to build an array with size (1,20) from A. Which 0-4 is from row 0 of A, 4-8 from row 1 of A, 8-12 from row 2 A, and 12-16 from row 3, and 16-20 from row 4`. I use this code:
B = np.zeros((1, 20))
B[0, 0:4] = A[0, 0:4]
B[0, 4:8] = A[1, 0:4]
B[0, 8:12] = A[2, 0:4]
B[0, 12:16] = A[3, 0:4]
B[0, 16:20] = A[4, 0:4]
and my B is :
array([[4., 2., 1., 4., 4., 2., 0., 3., 3., 2., 3., 2., 1., 1., 1., 3.,
3., 3., 4., 1.]])
However, since I have a lot of this type of array in my code, I want to ask, do you have any solution which does not to need to use all of this lines of code for it? Thank you.
>Solution :
It seems you just want to slice the first four columns of A and flatten them row-wise:
A =
np.array(
[[4, 2, 1, 4, 0, 1, 3, 2, 4, 4],
[4, 2, 0, 3, 1, 1, 4, 2, 2, 1],
[3, 2, 3, 2, 0, 3, 4, 1, 4, 3],
[1, 1, 1, 3, 1, 1, 3, 0, 2, 2],
[3, 3, 4, 1, 4, 1, 0, 1, 0, 2]])
B = A[:, 0:4].flatten()
Which gives the desired value of B, but with a shape (N, ).
array([4, 2, 1, 4, 4, 2, 0, 3, 3, 2, 3, 2, 1, 1, 1, 3, 3, 3, 4, 1])
Since you want your resulting array to have shape (1, N), you can just reshape it to that shape instead of flattening:
B = A[:, 0:4].reshape((1, -1))
# array([[4, 2, 1, 4, 4, 2, 0, 3, 3, 2, 3, 2, 1, 1, 1, 3, 3, 3, 4, 1]])
Reshaping to a shape of (1, -1) reshapes it to 1 row, and -1 (i.e. as many as required) columns.