When you use b = a.reshape((5,4,5)) you just create a different view on the same data used by the array a. (ie changes to the elements of a will appear in b). reshape() does not copy data in this case, so it is a very fast operation. Slicing b and slicing a accesses the same memory, so there shouldn't be any need for a different syntax for the b array (just use a[:10]). If you have created a copy of the data, perhaps with np.resize(), and discarded a, just reshape b: b.reshape((20,5))[:10].
Videos
When you use b = a.reshape((5,4,5)) you just create a different view on the same data used by the array a. (ie changes to the elements of a will appear in b). reshape() does not copy data in this case, so it is a very fast operation. Slicing b and slicing a accesses the same memory, so there shouldn't be any need for a different syntax for the b array (just use a[:10]). If you have created a copy of the data, perhaps with np.resize(), and discarded a, just reshape b: b.reshape((20,5))[:10].
By reshaping (20,5) to (5,4,5), there's no way you can pull out the 1st half of the values. You can't split those 5 rows into 2 even groups:
In [9]: b[:2]
Out[9]:
array([[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29],
[30, 31, 32, 33, 34],
[35, 36, 37, 38, 39]]])
In [10]: b[:3]
Out[10]:
array([[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29],
[30, 31, 32, 33, 34],
[35, 36, 37, 38, 39]],
[[40, 41, 42, 43, 44],
[45, 46, 47, 48, 49],
[50, 51, 52, 53, 54],
[55, 56, 57, 58, 59]]])
The last row of a[:10] is in the middle of b[3,:,:].
Note that b[:2] is (2,4,5), 8 rows of a, grouped into 2 sets of 4.
Now if you'd done c=a.reshape(4,5,5), then c[:2] would have those same 10 rows - in 2 sets of 5. And c[:2].reshape(10,-1) will look just like a[:10].
The method reshape, like the name suggests, reshapes a numpy array to the given dimensions. np.arange(10) gives you an array of shape (1, 10). If you use the reshape function, it expects the dimensions (or a tuple containing them) for example (2, 5). However, the -1 means that it will take the right dimension to fit your first argument. In your case, the first dimension is 2, which means the second dimension should be 5 so the reshape function fills this in automatically. That's why your output is of shape (2, 5). You can find all the information you need over here in the documentation.
I don't know if you know ,how reshape method works in numpy.If not ,you can follow this link https://numpy.org/doc/stable/reference/generated/numpy.reshape.html to know more about it. But if you know how it works,the explanation concerning
a = np.arange(10).reshape(2, -1)
is we create an array of 10 elements(0...9) using arange method.Then we transfrom this array into a matrix using reshape.The first parameter 2 is the number of lines of the matrix we want to create.And the second parameter -1 is used to infer one missing length from the other(here the number of columns).
Excuse me for my english.I'm not native speaker