优草派  >   Python

numpy 统计元素出现次数

吴雅婷            来源:优草派

NumPy是Python中一个非常重要的科学计算库,它提供了高效的多维数组(ndarray)操作。随着数据科学的兴起,NumPy也成为了Python数据科学领域的基石之一。其中一个重要的功能就是统计元素出现次数。本文将从多个角度分析NumPy统计元素出现次数的方法。1. 使用np.unique()函数

np.unique()函数可以返回数组中唯一元素的列表和每个唯一元素的出现次数。例如,我们可以使用以下代码生成一个数组并使用np.unique()函数统计元素出现次数:

numpy 统计元素出现次数

import numpy as np

arr = np.array([1, 2, 3, 1, 2, 1, 3, 3, 3])

unique, counts = np.unique(arr, return_counts=True)

print(unique)

print(counts)

输出结果为:

[1 2 3]

[3 2 4]

其中,unique数组包含了所有唯一的元素,counts数组包含了每个唯一元素的出现次数。

2. 使用np.bincount()函数

np.bincount()函数可以统计非负整数数组中每个元素出现的次数。例如,我们可以使用以下代码生成一个数组并使用np.bincount()函数统计元素出现次数:

import numpy as np

arr = np.array([1, 2, 3, 1, 2, 1, 3, 3, 3])

counts = np.bincount(arr)

print(counts)

输出结果为:

[0 3 2 4]

其中,counts数组中的第i个元素表示数值i在原数组中出现的次数。

需要注意的是,np.bincount()函数只能用于非负整数数组,如果数组中包含负数,则需要将数组中的元素都加上一个正数,使数组变为非负整数数组。

3. 使用collections.Counter类

Python标准库中的collections模块提供了一个Counter类,可以用于统计元素出现的次数。例如,我们可以使用以下代码生成一个数组并使用Counter类统计元素出现次数:

import numpy as np

from collections import Counter

arr = np.array([1, 2, 3, 1, 2, 1, 3, 3, 3])

counts = Counter(arr)

print(counts)

输出结果为:

Counter({3: 4, 1: 3, 2: 2})

其中,counts对象是一个字典,键为数组中的元素,值为该元素在数组中出现的次数。

需要注意的是,使用Counter类需要先将NumPy数组转换为Python列表。

4. 性能对比

以上三种方法都可以用于统计元素出现次数,但它们的性能不同。我们可以使用timeit模块进行性能测试。例如,我们可以使用以下代码测试以上三种方法的性能:

import numpy as np

from collections import Counter

import timeit

arr = np.random.randint(0, 100, 100000)

start_time = timeit.default_timer()

unique, counts = np.unique(arr, return_counts=True)

end_time = timeit.default_timer()

print("np.unique() time:", end_time - start_time)

start_time = timeit.default_timer()

counts = np.bincount(arr)

end_time = timeit.default_timer()

print("np.bincount() time:", end_time - start_time)

start_time = timeit.default_timer()

counts = Counter(list(arr))

end_time = timeit.default_timer()

print("collections.Counter() time:", end_time - start_time)

输出结果为:

np.unique() time: 0.014317100000000005

np.bincount() time: 0.00025340000000002284

collections.Counter() time: 0.018984900000000003

可以看到,np.bincount()函数的性能最好,np.unique()函数次之,Counter类的性能最差。

5. 总结

本文从三个角度分析了NumPy统计元素出现次数的方法,分别是使用np.unique()函数、np.bincount()函数和collections.Counter类。其中,np.bincount()函数的性能最好,np.unique()函数次之,Counter类的性能最差。需要根据实际情况选择合适的方法。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行