相关疑难解决方法(0)

使用itertools.groupby性能进行Numpy分组

我有许多大型(> 35,000,000)整数列表,它们将包含重复项.我需要计算列表中每个整数的计数.以下代码有效,但似乎很慢.任何人都可以使用Python更好的基准测试,最好是Numpy吗?

def group():
    import numpy as np
    from itertools import groupby
    values = np.array(np.random.randint(0,1<<32,size=35000000),dtype='u4')
    values.sort()
    groups = ((k,len(list(g))) for k,g in groupby(values))
    index = np.fromiter(groups,dtype='u4,u2')

if __name__=='__main__':
    from timeit import Timer
    t = Timer("group()","from __main__ import group")
    print t.timeit(number=1)
Run Code Online (Sandbox Code Playgroud)

返回:

$ python bench.py 
111.377498865
Run Code Online (Sandbox Code Playgroud)

干杯!

根据回复进行编辑:

def group_original():
    import numpy as np
    from itertools import groupby
    values = np.array(np.random.randint(0,1<<32,size=35000000),dtype='u4')
    values.sort()
    groups = ((k,len(list(g))) for k,g in groupby(values))
    index = np.fromiter(groups,dtype='u4,u2')

def group_gnibbler():
    import numpy as np
    from …
Run Code Online (Sandbox Code Playgroud)

python algorithm numpy

26
推荐指数
3
解决办法
2万
查看次数

查找数组中连续值的游程和长度

我想在数组及其索引中找到相等的值(如果它们连续出现两次以上)。

[0, 3, 0, 1, 0, 1, 2, 1, 2, 2, 2, 2, 1, 3, 4]
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我会发现值“2”从位置“8”开始出现“4”次。有没有内置函数可以做到这一点?

我找到了一种方法collections.Counter

collections.Counter(a)
# Counter({0: 3, 1: 4, 3: 2, 5: 1, 4: 1})
Run Code Online (Sandbox Code Playgroud)

但这不是我要找的。当然,我可以编写一个循环并比较两个值,然后对它们进行计数,但可能有更优雅的解决方案吗?

python arrays numpy

1
推荐指数
1
解决办法
712
查看次数

计算数组中连续相等的值

假设我有以下numpy数组:

a = np.array([1,5,5,2,3,6,5,2,5,5,5])
Run Code Online (Sandbox Code Playgroud)

我试图想出一个numpy解决方案来计算给定值连续出现的次数。因此,例如对于5我想得到的数字:

array([2,1,3])
Run Code Online (Sandbox Code Playgroud)

因为它在数组中连续出现 3 次,每次都有指定的重复次数。

python arrays numpy

-2
推荐指数
1
解决办法
634
查看次数

标签 统计

numpy ×3

python ×3

arrays ×2

algorithm ×1