擅长:python、mysql、java
<p>这里有一个使用<code>itertools.combinations_with_replacement</code>的生成器解决方案,不知道它是否适合您的需要。在</p>
<pre><code>def partitions(n, b):
masks = numpy.identity(b, dtype=int)
for c in itertools.combinations_with_replacement(masks, n):
yield sum(c)
output = numpy.array(list(partitions(3, 4)))
# [[3 0 0 0]
# [2 1 0 0]
# ...
# [0 0 1 2]
# [0 0 0 3]]
</code></pre>
<p>这个函数的复杂度呈指数增长,所以在可行和不可行之间存在一个离散的边界。在</p>
<p>注意,虽然numpy数组在构造时需要知道它们的大小,但这很容易实现,因为多集数很容易找到。下面的<em>可能是一个更好的方法,我没有做计时。在</p>
^{pr2}$