Arrays 运行/在线版本的Numpy Unique?

Arrays 运行/在线版本的Numpy Unique?,arrays,python-3.x,numpy,Arrays,Python 3.x,Numpy,我有一个NumPy数组,我想知道在数组的前N个条目中,每个可能的N=1,2,…,len(数组)中有多少个唯一的元素。例如,假设我的数组是[3,3,2,1,2]。我想计算索引0、1、2、3、4之前(包括索引0、1、2、3、4)的唯一元素的数量。对于这个数组,答案是[1,1,2,3,3] 我该怎么做 有没有一种更快的方法不涉及下面的列表理解 num_unique_elements_by_end_index = [len(np.unique(arr[:idx+1])) for idx in range

我有一个NumPy数组,我想知道在数组的前N个条目中,每个可能的N=1,2,…,len(数组)中有多少个唯一的元素。例如,假设我的数组是[3,3,2,1,2]。我想计算索引0、1、2、3、4之前(包括索引0、1、2、3、4)的唯一元素的数量。对于这个数组,答案是[1,1,2,3,3]

我该怎么做

有没有一种更快的方法不涉及下面的列表理解

num_unique_elements_by_end_index = [len(np.unique(arr[:idx+1])) for idx in range(len(arr))]

使用
list
set
的python解决方案:

In [1]: alist = [3, 3, 2, 1, 2]
In [2]: aset=set()
In [3]: for i in alist:
   ...:     aset.add(i)
   ...:     print(len(aset), aset)
   ...: 
1 {3}
1 {3}
2 {2, 3}
3 {1, 2, 3}
3 {1, 2, 3}

np.unique是一个相对复杂的函数,它对参数进行排序,并从中检测重复项。

Ah,因此如果使用unique排序,则无法以“在线”方式使用它。我认为您的意思是“内联”,或者实际上是累积的。无论如何,它不会像
set
那样使用散列,因此您不能基于以前的调用进行构建
numpy
对于像这样的任务来说不是很好,因为这些任务本质上是串行的。我不确定正确的单词是什么。在线和跑步似乎都不可能了。如果内联或累积更好,请随意编辑文章标题。