I have a (big) array with data and I would like to sort it with respect to given intervals. My code is very slow and I was wondering if there is a python function that could help me. I am aware that there is a sort-function and it can be used to keep the indices
sorted(range(len(vals)), key=vals.__getitem__)
but that doesn't seem too helpful with the intervals.
Here is my minimal example:
intervals = np.arange(0, 1, 0.1)
data = np.random.rand(5, 5)
output = [[] for _ in range(len(intervals))]
for i in range(np.shape(data)[0]):
for j in range(np.shape(data)[0]):
for k in range(len(intervals)-1):
if (data[i,j] >= intervals[k]) & (data[i,j] > intervals[k+1]):
output[i].append(data[i,j])
Thanks for any help!
Edit: I created some more realistic data that I use:
intervals = np.arange(0, 5000, 500)
data = [[1091, 781, 675, 3644, 677],
[91, 751, 2675, 644, 75],
[3791, 4756, 3675, 644, 3669],
[791, 1754, 1679, 4643, 2675],
[2991, 2751, 675, 2629, 2659]]
output = [[] for _ in range(len(intervals))]
for i in range(np.shape(data)[0]):
for j in range(np.shape(data)[1]):
for k in range(len(intervals)-1):
if (data[i][j] >= intervals[k]) & (data[i][j] < intervals[k+1]):
output[k].append(data[i][j])
# output = [[91, 75], [781, 675, 677, 751, 644, 644, 791, 675], [1091], [1754, 1679], [], [2675, 2675, 2991, 2751, 2629, 2659], [], [3644, 3791, 3675, 3669], [], []]