我有5个垂直字符串,由我的分类器按概率顺序生成。如果分类器的置信度非常高,我想保持这种分类,但对于低分类,我希望在所有可能的组合之间变化。
所以我的数据看起来像这样:
aa aa aa aa aa
ab ac aa ad ae
aa ab af ae ag
我希望得到所有可能的组合
aa aa aa aa aa aa aa aa aa aa ...
ab ac aa ad ae ae ab ac aa ad ...
aa ab af ae ag aa ab af ae ag...
我尝试过itertools,但我似乎找不到合适的工具来做到这一点。有谁知道怎么做?
[UPDATE]
这是我到目前为止所尝试的:
for x in new_lines:
for a,b,c,d,e,f,g,h,i,j in permutations(x.split(), 10):
print '{} {} {} {} {} {} {} {} {} {}'.format(a.rstrip('\n'), b.rstrip('\n'), c.rstrip('\n'), d.rstrip('\n'), e.rstrip('\n'), f.rstrip('\n'), g.rstrip('\n'), h.rstrip('\n'), i.rstrip('\n'), j.rstrip('\n'))
答案 0 :(得分:1)
似乎你需要替换字符串"aa ab ac ad ae af ag"
的三元组合,不包括所有元素相等的条目。
<强>代码强>
import itertools as it
iterable = "aa ab ac ad ae af ag".split()
combs = it.combinations_with_replacement(iterable, 3)
pred = lambda x: len(set(x)) != 1
results = list(filter(pred, combs))
transposed = list(zip(*results))
<强>演示强>
>>> for line in transposed:
... print(line)
('aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', ...)
('aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'ab', 'ab', 'ab', 'ab', 'ab', ...)
('ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ab', 'ac', 'ad', 'ae', 'af', ...)
选项强>
您可以在一行中将此代码简化为生成器:
transposed = zip(*(i for i in it.combinations_with_replacement(iterable, 3) if len(set(i)) != 1))