我正在尝试生成{0,1}和{00,01,10,11}的所有可能组合的集合,该组合应该是形状为(16,4)的数组>
类似
[[((0,0),0), ((0,1),0), ((1,0),0), ((1,1),0)],
[((0,0),0), ((0,1),0), ((1,0),0), ((1,1),1)],
...
[((0,0),1), ((0,1),1), ((1,0),1), ((1,1),1)],
...
]]
这实际上不必是数组,因为列表没有形状,所以我误用了术语数组:)
'00'很好,(0,0)更好,因为后者看起来不错,
注意:应该在外部列表中包含16个项目,在内部列表中包含4个项目
代码可以给出最小的块
bset = np.array([0,1])
fset = np.array(np.meshgrid(bset,bset)).T.reshape(-1,2)
[tuple(i) for i in fset]
是
[(0, 0), (0, 1), (1, 0), (1, 1)]
到目前为止,太酷了,然后事情变得一团糟。
此代码
np.array(np.meshgrid(t4,bset), np.object)
给予
array([[[0, 0, 0, 1, 1, 0, 1, 1],
[0, 0, 0, 1, 1, 0, 1, 1]],
[[0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1]]], dtype=object)
除了类似的东西
[((0,0),0), ((0,1),0), ((1,0),0), ((1,1),0)]
我也尝试过itertools
arr = [(0, 0), (0, 1), (1, 0), (1, 1)]
list(combinations(arr, 2))
很近
[((0, 0), (0, 1)),
((0, 0), (1, 0)),
((0, 0), (1, 1)),
((0, 1), (1, 0)),
((0, 1), (1, 1)),
((1, 0), (1, 1))]
该如何解决?
答案 0 :(得分:0)
您可以不使用numpy来实现。假设您有两个这样的列表:
>>> l1 = ['0', '1']
>>> l2 = ['00','01','10','11'] # using string as your question is unclear, see below
您可以像这样使用itertools.product
:
>>> import itertools
>>> result = list(itertools.product(l1, l2))
>>> result
[('0', '00'), ('0', '01'), ('0', '10'), ('0', '11'), ('1', '00'), ('1', '01'), ('1', '10'), ('1', '11')]
itertools.product
返回一个可迭代的对象。
在我们的问题中,您的输入集为{00,01,10,11}
,在输出中,您想要(0, 0),..
是错字吗?
您也可以在itertools.product
上执行set
,但是您在问题中提供的设置不是有效的python代码。
您的问题仍然不清楚输入,但我认为是:
set1 = {0, 1}
set2 = {(0, 0, ), (0, 1, ), (1, 0, ), (1, 1, )} # if you have a string or something else, convert it to tuple
然后您可以使用类似这样的内容:
import pprint
result = [list(itertools.product(set2, [x])) for x in set1]
pprint.pprint(result)
输出:
[[((0, 1), 0), ((1, 0), 0), ((0, 0), 0), ((1, 1), 0)],
[((0, 1), 1), ((1, 0), 1), ((0, 0), 1), ((1, 1), 1)]]
答案 1 :(得分:0)
您可以通过以下方式使用itertools.product
:
>>> options = (0, 1)
>>> base = list(it.product(options, options))
>>> output = [list(zip(base, i)) for i in it.product(*[options]*4)]
>>> pprint(output)
[[((0, 0), 0), ((0, 1), 0), ((1, 0), 0), ((1, 1), 0)],
[((0, 0), 0), ((0, 1), 0), ((1, 0), 0), ((1, 1), 1)],
[((0, 0), 0), ((0, 1), 0), ((1, 0), 1), ((1, 1), 0)],
[((0, 0), 0), ((0, 1), 0), ((1, 0), 1), ((1, 1), 1)],
[((0, 0), 0), ((0, 1), 1), ((1, 0), 0), ((1, 1), 0)],
[((0, 0), 0), ((0, 1), 1), ((1, 0), 0), ((1, 1), 1)],
[((0, 0), 0), ((0, 1), 1), ((1, 0), 1), ((1, 1), 0)],
[((0, 0), 0), ((0, 1), 1), ((1, 0), 1), ((1, 1), 1)],
[((0, 0), 1), ((0, 1), 0), ((1, 0), 0), ((1, 1), 0)],
[((0, 0), 1), ((0, 1), 0), ((1, 0), 0), ((1, 1), 1)],
[((0, 0), 1), ((0, 1), 0), ((1, 0), 1), ((1, 1), 0)],
[((0, 0), 1), ((0, 1), 0), ((1, 0), 1), ((1, 1), 1)],
[((0, 0), 1), ((0, 1), 1), ((1, 0), 0), ((1, 1), 0)],
[((0, 0), 1), ((0, 1), 1), ((1, 0), 0), ((1, 1), 1)],
[((0, 0), 1), ((0, 1), 1), ((1, 0), 1), ((1, 1), 0)],
[((0, 0), 1), ((0, 1), 1), ((1, 0), 1), ((1, 1), 1)]]