2014-10-09 6 views
0

유전자 노드의 데이터 세트 인 데이터 세트가 있습니다. 그것은 한 쌍의 노드를 가지며 주어진 가중치로서의 일부 값입니다. 나는 해당 유전자 쌍의 중간 값을 찾아야한다. 노드 쌍이 전체 데이터 세트에서 발생하는 횟수를 계산 한 다음 값의 중앙값을 계산합니다. 여기서 Col[0] and Col[1]은 노드 쌍이고 Col[2]은 가중치입니다. 아래의 코드는 노드와 홀수가 올바른 경우의 중간 값을 출력하지만 짝수 번 발생하는 경우 두 개의 중간 값 중 더 큰 값을 표시합니다. 어떤 제안도 감사합니다.중간 값 찾기

입력 유형 : 큰 파일의 작은 목록.

5372 937 65.0 
4821 937 65.0 
4376 937 65.0 
2684 937 65.0 
4391 3715 1880.0 
3436 1174 2383.0 
3436 3031 2383.0 
3436 1349 2383.0 
5372 937 70.0 
4821 937 70.0 
4376 937 70.0 
2684 937 70.0 
3826 896 10.0 
3826 896 17.0 
5372 937 62.0 
4821 937 62.0 
4376 937 62.0 
2684 937 62.0 
3826 896 50.0 
4944 3715 482.0 
4944 4391 482.0 
2539 1431 323.0 
5372 937 59.0 
4821 937 59.0 
4376 937 59.0 
2684 937 59.0 
896 606 11.0 
3826 896 10.0 
5045 4901 11.0 
4921 4901 11.0 
4901 3545 11.0 
4901 3140 11.0 
4901 4243 11.0 

번호 :

심지어 두 중간 숫자의 평균값 숫자이다 설정할 수가 홀수 세트의 중간 값이 중간 인 대한 정의 중앙값으로 당
from collections import defaultdict 
import numpy as np 

pt = defaultdict(float) 
pm = defaultdict(float) 
pc = defaultdict(int) 
with open('input.txt', 'r') as f: 
    with open('output.txt', 'w') as o: 
    for numline, line in enumerate((line.split() for line in f), start=1): 
     pair = line[0], line[1] 
     pc[pair] += 1  
     pt[pair] = float(line[2]) 
     pm[pair] = np.median(pt[pair]) 
     print pair, pc[pair], pm[pair] 

. 숫자가 짝수 인 경우 어떻게하면 더 좋은 중간 값을 얻을 수 있습니까?

+4

"better"로 정의하십시오. –

+3

설명에서 코드가 기본적으로 짝수 크기 그룹을 제외하고 작동하는 것처럼 들리지만 어떻게 될 수 있는지 잘 모르겠습니다. 'pt [pair] = float (line [2])'를 설정하고'np.median (pt [pair])'를 계산하면 항상'float (line [2]) '와 같지 않을까요? 대신에 한 쌍으로 연결된 가중치 목록을 누적하고 그 중 * *를 취하고 싶지 않으십니까? – DSM

답변

0

pt 사전이 적합하지 않습니다. 각 쌍의 마지막 가중치를 저장하고 가중치 전체 목록이 필요한 중앙값을 계산합니다. 다음을 할 수 있습니다 :

from collections import defaultdict 
import numpy as np 

pt = defaultdict(list) 
pc = defaultdict(int) 
with open('input.txt', 'r') as f: 
    with open('output.txt', 'w') as o: 
    for numline, line in enumerate((line.split() for line in f), start=1): 
     pair = line[0], line[1] 
     pc[pair] += 1  
     pt[pair].append(float(line[2])) 

# now with the medians 
pm = dict() 
for pair, weights in pt.items(): 
    pm[pair] = np.median(weights) 
    print pair, pc[pair], pm[pair] 
+1

위대한 작품 –