【发布时间】:2021-07-01 01:58:40
【问题描述】:
使用numpy,给定一个已排序的一维数组,如何有效地获得一个大小相等的一维数组,其中每个位置的值是前面相等元素的个数?我有非常大的数组,并且以一种或另一种方式处理 Python 代码中的每个元素是不可接受的。
例子:
input = [0, 0, 4, 4, 4, 5, 5, 5, 5, 6]
output = [0, 1, 0, 1, 2, 0, 1, 2, 3, 0]
【问题讨论】:
标签: numpy
使用numpy,给定一个已排序的一维数组,如何有效地获得一个大小相等的一维数组,其中每个位置的值是前面相等元素的个数?我有非常大的数组,并且以一种或另一种方式处理 Python 代码中的每个元素是不可接受的。
例子:
input = [0, 0, 4, 4, 4, 5, 5, 5, 5, 6]
output = [0, 1, 0, 1, 2, 0, 1, 2, 3, 0]
【问题讨论】:
标签: numpy
import numpy as np
A=np.array([0, 0, 4, 4, 4, 5, 5, 5, 5, 6])
uni,counts=np.unique(A, return_counts=True)
out=np.concatenate([np.arange(n) for n in counts])
print(out)
不确定效率(可能是形成out 数组而不是连接的更好方法),但是一种非常直接的方法来获得您正在寻找的结果。对唯一元素进行计数,然后对每个计数执行np.arange 以获得升序,然后将这些数组连接在一起。
【讨论】: