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)
处的多重阶乘的值,其因子取决于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.])