scipy.special.

stirling2#

scipy.special.stirling2(N, K, *, exact=False)[source]#

生成第二类斯特林数。

第二类斯特林数计算将一个具有 N 个元素的集合划分为 K 个非空子集的方法数。

此函数返回的值使用动态规划计算,该动态规划避免了解决方案中子问题之间的冗余计算。 对于类似数组的输入,此实现还避免了不同斯特林数计算之间的冗余计算。

这些数字有时表示为

\[{N \brace{K}}\]

详情请参阅[1]。这通常口头表达为“N 子集 K”。

参数:
Nint, ndarray

事物的数量。

Kint, ndarray

采用的非空子集的数量。

exactbool, optional

对于较小的数组,使用带浮点数的动态规划 (DP),对于 NK 的较大条目,使用 Temme 的二阶近似,允许在速度和精度之间进行权衡。 有关描述,请参见[2]。 Temme 近似用于 n>50 的值。 DP 的最大误差对于 n<=50 具有最大相对误差 4.5*10^-16,并且 Temme 近似对于 51 <= n < 70 具有最大相对误差 5*10^-5,对于 70 <= n < 101 具有最大相对误差 9*10^-6。 请注意,随着 n 的增加,这些最大相对误差将进一步减小。

返回值:
valint, float, ndarray

分区的数量。

另请参见

comb

一次取 k 个 N 个事物的组合数。

注释

  • 如果 N < 0 或 K < 0,则返回 0。

  • 如果 K > N,则返回 0。

输出类型将始终为 intobject 的 ndarray。 输入必须包含 numpy 或 python 整数,否则会引发 TypeError。

参考文献

[1]

R. L. Graham、D. E. Knuth 和 O. Patashnik,“Concrete Mathematics: A Foundation for Computer Science”,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])