stirling2#
- scipy.special.stirling2(N, K, *, exact=False)[源代码][源代码]#
生成第二类斯特林数。
第二类斯特林数计算将一个具有 N 个元素的集合划分为 K 个非空子集的方法数。
此函数返回的值是使用动态规划计算的,该规划避免了在解决方案中跨子问题的冗余计算。对于类似数组的输入,此实现还避免了在不同斯特林数计算中的冗余计算。
这些数字有时被表示为
\[{N \brace{K}}\]详情请参见 [1] 。这通常被口头表达为“N 子集 K”。
- 参数:
- Nint, ndarray
事物的数量。
- Kint, ndarray
非空子集的数量。
- 精确bool, 可选
使用动态规划(DP)处理较小的数组,并使用浮点数。对于较大的 N 和 K 条目,使用Temme的二阶近似,这允许在速度和精度之间进行权衡。参见 [2] 的描述。Temme近似用于 n>50 的值。DP的最大相对误差为 4.5*10^-16 对于 n<=50,Temme近似的最大相对误差为 5*10^-5 对于 51 <= n < 70 和 9*10^-6 对于 70 <= n < 101。请注意,随着 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 and O. Patashnik, “Concrete Mathematics: A Foundation for Computer Science,” Addison-Wesley Publishing Company, Boston, 1989. Chapter 6, page 258.
[2]Temme, Nico M. “Stirling 数的渐近估计。” 《应用数学研究》 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, 3025], dtype=object)