我正在使用Python进行工作,需要找到一种算法来生成所有可能的n维k,k,...,k数组,每个数组沿轴线排列成一行。因此,该函数采用两个数字-n和k,并应返回一个数组列表,该数组包含沿每个轴的所有可能的k行。
例如,对于n = 2和k = 3,有6种可能性(3条水平线和3条垂直线):
[[1, 1, 1],
[0, 0, 0],
[0, 0, 0]],
[[0, 0, 0],
[1, 1, 1],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 0],
[1, 1, 1]],
[[1, 0, 0],
[1, 0, 0],
[1, 0, 0]],
[[0, 1, 0],
[0, 1, 0],
[0, 1, 0]],
[[0, 0, 1],
[0, 0, 1],
[0, 0, 1]]
对于n = 3和k = 3,有27种可能性(9条线,每3条轴各有3条)。
不幸的是,我什至不知道如何对任意n和k进行处理。有什么建议么?
这是一种生成器方法,itertools.product
用于获取放置线的索引。itertools.product
通常对于替换可变深度的嵌套循环很有用:
import numpy as np
import itertools
def lines(n, k):
for axis in range(n):
ranges = ((slice(None),) if a==axis else range(k) for a in range(n))
for idx in itertools.product(*ranges):
ret = np.zeros(n*(k,), dtype=int)
ret[idx] = 1
yield ret
for line in lines(2, 3):
print(line)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句