I'm trying to divide a large array into smaller sub-arrays, but can't figure out how to do it without resorting to a very naive method of just looping over the array with two indices, as in the following code:
import numpy as np
a = np.arange(100)
idx = np.linspace(0, 100, 9).astype(np.int16)
for idx_start, idx_end in zip(idx[:-1], idx[1:]):
print(a[idx_start:idx_end])
Output:
[ 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 60 61]
[62 63 64 65 66 67 68 69 70 71 72 73 74]
[75 76 77 78 79 80 81 82 83 84 85 86]
[87 88 89 90 91 92 93 94 95 96 97 98 99]
I saw this answer, but it doesn't fit my requirements due to 2 reasons:
- It generates overlapping arrays
- it is even more unintuitive than the
forloop
My question is:
Is there a way to skip the loop, and do it in a more "elegant" way (e.g., by using some numpy functionality etc.)
Thanks in advance