Sch*_*h21 4 python arrays performance numpy
要计算的数量是log(k!),其中k可以是 4000 甚至更高,但当然日志会补偿。我尝试过计算,sum(log(k))结果是一样的。
因此,我得到了一个包含整数的大数组,我想有效地计算sum(log(k))。这是我的尝试:
integers = np.asarray([435, 535, 242,])
score = np.sum(np.log(np.arange(1,integers+1)))
Run Code Online (Sandbox Code Playgroud)
这是可行的,除了np.arange会为每个整数生成一个不同大小的数组,所以当我运行它时,它会给我一个错误(正如它应该的那样)。
这个问题可以通过for循环轻松解决,如下所示:
scores = []
for i in range(integers.shape[0]):
score = np.sum(np.log(np.arange(1,integer[i]+1)))
scores.append(score)
Run Code Online (Sandbox Code Playgroud)
但这太慢了。我的实际integers值有数百万需要计算。
是否有一个基本上不需要 for 循环的有效实现?我正在考虑一个lambda函数或类似的东西,但我不太确定如何应用它。任何帮助表示赞赏!
math.lgamma 怎么样?Gamma 函数是阶乘,并且lgamma是 gamma 的对数。
您不需要计算阶乘然后记录。
gammalnSciPy 中也有
代码,Python 3.9 x64 Win 10
import numpy as np
from scipy.special import gammaln
startf = 1 # start of factorial sequence
stopf = 400 # end of of factorial sequence
q = gammaln(range(startf+1, stopf+1)) # n! = G(n+1)
print(q)
Run Code Online (Sandbox Code Playgroud)
我觉得很合理
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |