Numpypy的bincount

时间:2013-11-26 21:15:14

标签: python numpy pypy

我有一个项目大量使用Numpy函数bincount。现在我想使用 pypy 来提高性能。不幸的是,如numpypy status page所述,仍然不支持bincount函数。

所以我的问题是:

  1. 是否有一个与bincount一样快的替代函数可以用numpypy实现?我看histogram但速度太慢了,我认为使用它会破坏使用pypy的优点。这是证据:

    Numpy

    timeit.timeit("np.bincount(x)", setup="import numpy as np; x = np.array([0] * 20 + [1] * 30)")
    0.8197031021118164
    

    Numpypy

    timeit.timeit("np.histogram(x)", setup="import numpy as np; x = np.array([0] * 20 + [1] * 30)")
    12.335555076599121
    
  2. 我很高兴看到numpypy的发展非常活跃。因此,由于我的项目截止日期是在一个月内,所以在这样的日期内是否有机会实施bincount?

1 个答案:

答案 0 :(得分:1)

您可以通过执行以下操作来实现bincount:

def bincount(x):
    result = np.zeros(x.max() + 1, int)
    for i in x:
        result[i] += 1

你必须对它进行分析才能确定,但​​是由于pypy的jit编译器,这实际上应该非常快,即使它没有纯c实现那么快。如果你试试,我想知道它是怎么回事。