scipy.special.
stirling2#
- scipy.special.stirling2(N, K, *, exact=False)[source]#
生成斯特林二类数。
二类斯特林数计算出将一个包含 N 个元素的集合划分到 K 个非空子集中的方法的数量。
此函数返回的值是使用动态规划计算的,这种规划避免了对于解决方案中子问题的冗余计算。对于数组类输入,此实现还避免了对于不同的斯特林数计算的冗余计算。
有时用以下数字表示
\[{N \brace{K}}\]请参见 [1] 了解更多详细信息。这常常以“N 子级 K”的形式进行口头表述。
- 参数:
- Nint,ndarray
事物数量。
- Kint,ndarray
获取的非空子集的数量。
- exactbool,可选
使用浮点数针对较小的数组进行动态规划 (DP),并且使用针对 N 和 K 的较大条目进行二阶渐近,这将允许对速度和准确性进行权衡。请参阅 [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 和 O. Patashnik,“具体数学:计算机科学基础”,阿迪森-韦斯利出版公司,波士顿,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, 3025], dtype=object)