내가 좋아하는 빅 데이터가 있습니다. 'a'의 행은 하위 행에 의해 절대로 중복되지 않습니다. 가장 일치하는 값의 관점에서 2 개 (ab, ac) 또는 3 개 (abc) 이상의 행을 가장 효과적으로 조합하려면 어떤 효과가 있습니까? 희망, 여하튼, 질문을 명확하게 설명하기가 어렵습니다 :/ 어쩌면 numpy의 일부 매트릭스 작업?파이썬 매트릭스 비교
자세한 정보 : 가능한 조합은 ab, ac, bc입니다. ab는 a (a_1, a_2, a_3)의 행을 b (b_1, b_2)의 행에 대해 서로 검사합니다. a_1 & b_1은 0b110000 & 0b100100을 의미하고 하나의 결과를 제공합니다. a_1 & b_2는 0b110000 & 0b000001을 의미하며 결과가 없습니다. 이는 루프 별 솔루션에 대한 설명이지만, 특히 8 개 정도의 조합 (예제 데이터로는 다루지 않음)에서 매우 느립니다.
어쩌면 데이터의 더 명확 구조 : 나는 지금까지 그 계산을하고 있어요 방법
{'a': [0b110000,
0b001100,
0b000011],
'b': [0b100100,
0b000001],
'c': [0b100000]}
는 나에게 쇼를 보자. 데이터 구조는 ... 이것에
data = {'a':[1,1,2,2,3,3],
'b':[4,5,5,5,4,5],
'c':[6,7,7,7,6,7]}
combine_count = 3
for config in combinations(['a','b','c'],combine_count):
ret = {}
for index,combined in enumerate(zip(*tuple(data.get(k) for k in config))):
ret.setdefault(combined, []).append(index)
for k,v in ret.items():
score = len(v)
if score >= 2:
print(k,score)
내 문제가 큰 combine_count과 함께 건설의 특히 과정 종류의 서로 다른, 더 나은 구조 '생각'은 함께이 질문을 시작하려고 같다 많은 시간이 걸린다. 물론 데이터가 훨씬 큽니다. 그것에는 길이 약 ~ 60000의 목록이있는 약 231 개의 키가 있습니다. 또한 RAM 소비가 너무 높습니다.
데이터 예제를 사용하여 달성 한 결과를 정확히 보여줍니다. (ab, ac) 및 (abc)는 아무데도 등장하지 않았으며 큰 데이터와 직접적으로 관련이 없습니다. – paddyg
가 더 많은 정보를 추가했습니다. 희망, 그게 도움이됩니다. –
그러면 a1 & b1-> 16, a1 & b2-> 0, a2 & b1-> 4, a2 & b2-> 0, a3 & b1-> 0, a3 & b2-> 1이됩니다. 트리플 버전의 경우 평가는 a1 & b1 | a1 & c1 | b1 & c1? – paddyg