当前位置: 首页 > 知识库问答 >
问题:

Numpy:数组中唯一值的最有效频率计数

曾昂然
2023-03-14

numpy/scipy中,是否有一种有效的方法来获取数组中唯一值的频率计数?

大致如下:

x = array( [1,1,1,2,2,2,5,25,1,1] )
y = freq_count( x )
print y

>> [[1, 5], [2,3], [5,1], [25,1]]

(对于R用户来说,我基本上是在寻找table()函数)

共有3个答案

南门志
2023-03-14

更新:原始答案中提到的方法已被弃用,我们应使用新方法:

>>> import numpy as np
>>> x = [1,1,1,2,2,2,5,25,1,1]
>>> np.array(np.unique(x, return_counts=True)).T
    array([[ 1,  5],
           [ 2,  3],
           [ 5,  1],
           [25,  1]])

原答案:

您可以使用scipy.stats.itemfreq

>>> from scipy.stats import itemfreq
>>> x = [1,1,1,2,2,2,5,25,1,1]
>>> itemfreq(x)
/usr/local/bin/python:1: DeprecationWarning: `itemfreq` is deprecated! `itemfreq` is deprecated and will be removed in a future version. Use instead `np.unique(..., return_counts=True)`
array([[  1.,   5.],
       [  2.,   3.],
       [  5.,   1.],
       [ 25.,   1.]])
姜奇
2023-03-14

看看np.bincount

http://docs.scipy.org/doc/numpy/reference/generated/numpy.bincount.html

import numpy as np
x = np.array([1,1,1,2,2,2,5,25,1,1])
y = np.bincount(x)
ii = np.nonzero(y)[0]

然后:

zip(ii,y[ii]) 
# [(1, 5), (2, 3), (5, 1), (25, 1)]

或:

np.vstack((ii,y[ii])).T
# array([[ 1,  5],
         [ 2,  3],
         [ 5,  1],
         [25,  1]])

或者您想如何组合计数和唯一值。

哈襦宗
2023-03-14

从Numpy 1.9开始,最简单、最快的方法就是简单地使用Numpy.unique,它现在有一个return\u counts关键字参数

import numpy as np

x = np.array([1,1,1,2,2,2,5,25,1,1])
unique, counts = np.unique(x, return_counts=True)

print np.asarray((unique, counts)).T

其中:

 [[ 1  5]
  [ 2  3]
  [ 5  1]
  [25  1]]

与scipy.stats.itemfreq的快速比较:

In [4]: x = np.random.random_integers(0,100,1e6)

In [5]: %timeit unique, counts = np.unique(x, return_counts=True)
10 loops, best of 3: 31.5 ms per loop

In [6]: %timeit scipy.stats.itemfreq(x)
10 loops, best of 3: 170 ms per loop
 类似资料:
  • 问题内容: 在 /中 ,是否有一种 有效的 方法来获取数组中唯一值的频率计数? 遵循以下原则: (对于您来说,R用户在那里,我基本上是在寻找该功能) 问题答案: 看一下: http://docs.scipy.org/doc/numpy/reference/generated/numpy.bincount.html 接着: 要么: 或者您想将计数和唯一值结合起来。

  • 如何有效地获取NumPy数组中每个唯一值的频率计数?

  • 问题内容: 信不信由你,在分析当前代码后,numpy数组还原的重复操作将占用大量的运行时间。我现在拥有的是基于视图的常见方法: 还有其他方法可以更有效地执行此操作,还是我对不切实际的numpy性能的痴迷所致的幻觉? 问题答案: 创建时,您正在创建原始数组的视图。然后,您可以更改原始数组,并且视图将更新以反映所做的更改。 您是否经常需要重新创建视图?您应该能够执行以下操作: 我不是numpy专家,但

  • 问题内容: 示例问题 作为一个简单的示例,请考虑以下定义的numpy数组: 其中,像这样在控制台输出: 我现在想按行“向前填充” array中的值。我的意思是用左侧最接近的有效值替换每个值。所需的结果如下所示: 到目前为止尝试过 我试过使用for循环: 我还尝试过使用熊猫数据框作为中间步骤(因为熊猫数据框具有非常整洁的内置方法用于正向填充): 以上两种策略都能产生预期的结果,但是我一直在想:仅使用

  • 例如,对于 我想得到 有没有办法不用for循环或使用? 编辑:实际数据由1000行组成,每行100个元素,每个元素的范围从1到365。最终目标是确定有重复的行的百分比。这是一个作业问题,我已经解决了(用for循环),但我只是想知道是否有更好的方法来做它与Numpy。