相关疑难解决方法(0)

将数组排序到由索引数组指定的 bin 的最有效方法?

任务举例:

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)

python numpy scipy pandas pythran

6
推荐指数
1
解决办法
1055
查看次数

标签 统计

numpy ×1

pandas ×1

python ×1

pythran ×1

scipy ×1