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)处的多重阶乘的值,其因子取决于k和n % k,请参见下文或 [1]。
- 返回值:
- nfint 或 float 或 complex 或 ndarray
n的多重阶乘(阶数k),作为整数、浮点数或复数(取决于exact和extend)。数组输入作为数组返回。
备注
虽然不如双阶乘那么直接,但可以通过研究给定余数
r < k的n(因此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.])