scipy.special.

factorialk#

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

n 階 multifactorial,n(!!…!).

這是跳過 k 值的 n 階 multifactorial。例如,

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)

multifactorial 的輸入值。非整數值需要 extend='complex'。預設情況下,n < 0 的回傳值為 0。

nint 或 float 或 complex(或 array_like)

multifactorial 的階數。非整數值需要 extend='complex'

exactbool,optional

如果 exact 設定為 True,則使用整數算術精確計算答案,否則使用近似值(較快,但會產生浮點數而不是整數)。預設值為 False。

extendstring,optional

可以是 'zero''complex';這決定如何處理 n<0 的值 - 預設情況下它們是 0,但可以選擇加入 multifactorial 的複數擴展。這使得不僅可以傳遞複數值給 n,也可以傳遞給 k

警告

使用 'complex' 擴展也會更改整數 n != 1 (mod k) 處的 multifactorial 值,更改的因子取決於 kn % k,請參閱下方或 [1]。

回傳:
nfint 或 float 或 complex 或 ndarray

n 的 multifactorial(階數 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.])