H.R*_*ort 0 python numpy vectorization multidimensional-array
我有一个(任意形状的)X整数数组,并且我想计算每个条目的阶乘的对数(精确地,不是通过Gamma函数)。数字足够大
np.log(scipy.special.factorial(X))
Run Code Online (Sandbox Code Playgroud)
是不可行的。所以我想做类似的事情np.sum(np.log(np.arange(2,X+1)), axis=-1)
但是arange()函数为每个条目赋予不同的大小,因此这是行不通的。我虽然想用填充,但是我不确定该怎么做。
能以向量化的方式完成吗?
我看不到gamma函数有什么问题。伽马函数不是近似值,尽管近似值可能包含在内scipy.special.gammaln,但没有理由期望这些近似值比手动计算结果所涉及的误差还差。scipy.special.gammaln似乎是完成工作的理想工具:
X_log_factorials = scipy.special.gammaln(X+1)
Run Code Online (Sandbox Code Playgroud)
如果您仍然希望手动执行此操作,则可以取所有正整数的对数直至数组的最大值,计算累加和,然后选择您感兴趣的对数阶乘:
logarithms = numpy.log(numpy.arange(1, X.max()+1))
log_factorials = numpy.cumsum(logarithms)
X_log_factorials = log_factorials[X-1]
Run Code Online (Sandbox Code Playgroud)
(如果要处理0!,则需要进行一些小的调整,例如通过设置X_log_factorials[X==0] = 0。)
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |