我正在尝试实现一种在 python 中创建频率表的有效方法,其中包含相当大的 numpy 输入~30 million
条目数组。目前我正在使用for-loop
,但它花费的时间太长了。
输入是一个有序numpy array
的形式
Y = np.array([4, 4, 4, 6, 6, 7, 8, 9, 9, 9..... etc])
我想有一个表单的输出:
Z = {4:3, 5:0, 6:2, 7:1,8:1,9:3..... etc} (as any data type)
目前我正在使用以下实现:
Z = pd.Series(index = np.arange(Y.min(), Y.max()))
for i in range(Y.min(), Y.max()):
Z[i] = (Y == i).sum()
有没有更快的方法来做到这一点,或者没有iterating
通过循环的方法?感谢您的帮助,如果之前有人问过这个问题,很抱歉!
您可以使用集合模块中的 Counter 简单地做到这一点。请参阅我为您的测试用例运行的以下代码。
import numpy as np
from collections import Counter
Y = np.array([4, 4, 4, 6, 6, 7, 8, 9, 9, 9,10,5,5,5])
print(Counter(Y))
它给出了以下输出
Counter({4: 3, 9: 3, 5: 3, 6: 2, 7: 1, 8: 1, 10: 1})
您可以轻松地进一步使用此对象。我希望这有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句