scipy.special.

factorialk#

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

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

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

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

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

factorialk(n, 1) = factorial(n)

factorialk(n, 2) = factorial2(n)

参数:
nint 或 float 或 complex(或它们的类数组)

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

nint 或 float 或 complex(或它们的类数组)

多重阶乘的阶数。非整数值需要 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 >= 0k > 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.])