scipy.special.

factorialk#

scipy.special.factorialk(n, k, exact=False, extend='zero')[source]#

n 的 k 阶多重阶乘,n(!!…!).

这是 n 的多重阶乘,跳过 k 个值。例如,

factorialk(17, 4) = 17!!!! = 17 * 13 * 9 * 5 * 1

特别地,对于任何整数 n,我们有

factorialk(n, 1) = factorial(n)

factorialk(n, 2) = factorial2(n)

参数:
nint 或 float 或 complex (或 array_like)

多重阶乘的输入值。非整数值需要 extend='complex'。默认情况下,n < 0 的返回值是 0。

nint 或 float 或 complex (或 array_like)

多重阶乘的阶数。非整数值需要 extend='complex'

exactbool, 可选

如果 exact 设置为 True,则使用整数算术精确计算答案,否则使用近似值(更快,但产生浮点数而不是整数)默认为 False。

extendstring, 可选

'zero''complex' 之一;这决定了如何处理 n<0 的值 - 默认情况下它们是 0,但可以选择进入多重阶乘的复数扩展。这使得不仅可以传递复数值给 n,还可以传递给 k

警告

使用 'complex' 扩展也会改变整数 n != 1 (mod k) 处的多重阶乘的值,其因子取决于 kn % k,请参见下文或 [1]。

返回值:
nfint 或 float 或 complex 或 ndarray

n 的多重阶乘(阶数 k),作为整数、浮点数或复数(取决于 exactextend)。数组输入作为数组返回。

备注

虽然不如双阶乘那么直接,但可以通过研究给定余数 r < kn(因此 n = m * k + r, 或 r = n % k),来计算 n!(k) 的一般近似公式,它可以组合成对所有整数值 n >= 0 & k > 0 有效的东西

n!(k) = k ** ((n - r)/k) * gamma(n/k + 1) / gamma(r/k + 1) * max(r, 1)

这是 exact=False 时的近似基础。

原则上,任何固定的 r 选择(忽略它与 n 的关系 r = n%k)都会提供从整数 n 到复数 z 的合适的解析延拓(不仅满足函数方程,而且是对数凸的,参见 Bohr-Mollerup 定理)——事实上,上面的 r 选择只会改变函数一个常数因子。决定规范延拓的最终约束是 f(1) = 1,它强制 r = 1 (另见 [1])。

z!(k) = k ** ((z - 1)/k) * gamma(z/k + 1) / gamma(1/k + 1)

参考

示例

>>> from scipy.special import factorialk
>>> factorialk(5, k=1, exact=True)
120
>>> factorialk(5, k=3, exact=True)
10
>>> factorialk([5, 7, 9], k=3, exact=True)
array([ 10,  28, 162])
>>> factorialk([5, 7, 9], k=3, exact=False)
array([ 10.,  28., 162.])