任务举例:
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
idx = np.array([2, 0, 1, 1, 2, 0, 1, 1, 2])
Run Code Online (Sandbox Code Playgroud)
预期结果:
binned = np.array([2, 6, 3, 4, 7, 8, 1, 5, 9])
Run Code Online (Sandbox Code Playgroud)
约束:
应该很快。
应该是O(n+k)其中 n 是数据的长度,k 是 bin 的数量。
应该是稳定的,即保留 bin 内的顺序。
明显的解决方案
data[np.argsort(idx, kind='stable')]
Run Code Online (Sandbox Code Playgroud)
是O(n log n)。
O(n+k) 解决方案
def sort_to_bins(idx, data, mx=-1):
if mx==-1:
mx = idx.max() + 1
cnts = np.zeros(mx + 1, int)
for i in range(idx.size):
cnts[idx[i] …Run Code Online (Sandbox Code Playgroud)