我有一个项目大量使用Numpy函数bincount。现在我想使用 pypy 来提高性能。不幸的是,如numpypy status page所述,仍然不支持bincount函数。
所以我的问题是:
是否有一个与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
我很高兴看到numpypy的发展非常活跃。因此,由于我的项目截止日期是在一个月内,所以在这样的日期内是否有机会实施bincount?
答案 0 :(得分:1)
您可以通过执行以下操作来实现bincount:
def bincount(x):
result = np.zeros(x.max() + 1, int)
for i in x:
result[i] += 1
你必须对它进行分析才能确定,但是由于pypy的jit编译器,这实际上应该非常快,即使它没有纯c实现那么快。如果你试试,我想知道它是怎么回事。