scipy.special.
stirling2#
- scipy.special.stirling2(N, K, *, exact=False)[源代码]#
生成第二类斯特林数。
第二类斯特林数计算将一个包含 N 个元素的集合划分为 K 个非空子集的划分方式数量。
此函数返回的值使用动态规划计算,该方法避免了解决方案中子问题的冗余计算。 对于类似数组的输入,此实现还避免了不同斯特林数计算之间的冗余计算。
这些数字有时表示为
\[{N \brace{K}}\]详见 [1]。 这通常口头表达为 “N 子集 K”。
- 参数:
- Nint, ndarray
事物的数量。
- Kint, ndarray
所取的非空子集的数量。
- exactbool, optional
对较小的数组使用带有浮点数的动态规划(DP),对于较大的 N 和 K 条目,使用 Temme 的二阶近似,这样可以在速度和精度之间进行权衡。 请参阅 [2] 了解相关描述。 Temme 近似用于
n>50
的值。 对于n<=50
,DP 的最大相对误差为4.5*10^-16
;对于51 <= n < 70
,Temme 近似的最大相对误差为5*10^-5
;对于70 <= n < 101
,最大相对误差为9*10^-6
。 请注意,随着 n 的增加,这些最大相对误差将进一步减小。
- 返回:
- valint, float, ndarray
划分的数量。
另请参见
comb
从 N 个事物中取出 k 个的组合数。
注释
如果 N < 0 或 K < 0,则返回 0。
如果 K > N,则返回 0。
输出类型将始终是 int 或 object 的 ndarray。 输入必须包含 numpy 或 python 整数,否则将引发 TypeError。
参考文献
[1]R. L. Graham、D. E. Knuth 和 O. Patashnik,“具体数学:计算机科学基础”,Addison-Wesley Publishing Company,波士顿,1989 年。第 6 章,第 258 页。
[2]Temme, Nico M. “斯特林数的渐近估计。”《应用数学研究》89.3 (1993): 233-243。
示例
>>> import numpy as np >>> from scipy.special import stirling2 >>> k = np.array([3, -1, 3]) >>> n = np.array([10, 10, 9]) >>> stirling2(n, k) array([9330.0, 0.0, 3025.0])