저는 파이썬에 익숙하지 않지만,해야 할 일이 있습니다. ASCII 파일 (공백으로 구분)이 여러 열로 있습니다. 첫 번째 열에서 일부 값은 중복됩니다. 이 중복 된 값에서 예를 들어 3 열에서 더 큰 값을 가진 선을 선택하고 다시 배열을 반환해야합니다. 여기에 지금까지 가지고 무엇파이썬은 열의 최대 값을 기준으로 행을 선택합니다.
#col1 col2 col3 col4 col5
1 1 2 3 4
1 2 1 5 3
2 2 5 2 1
선 1, 3 을 반환 : 나는 이런 식으로 뭔가를하고 싶습니다 내가 중복의 인덱스 (모든 두 번째 항목)
을 감지 할 수있는 보조 기능을 정의 다음def list_duplicates(seq):
seen = set()
seen_add = seen.add
return [idx for idx,item in enumerate(seq) if item in seen or seen_add(item)]
와 (나는 각 열을 명명 np.genfromtxt있는 파일에서로드 것을) 목록을 읽고 그것을 사용하려고
def select_high(ndarray, dup_col, sel_col): #dup_col is the column where the duplicates are, sel_col is the column where we select the larger value
result = []
dup = list_duplicates(ndarray[dup_col])
dupdup = [x-1 for x in dup]
for i in range(len(ndarray[sel_col])):
if i in dup:
mid = []
maxi = max(ndarray[sel_col][i], ndarray[sel_col][i-1])
maxi_index = np.where(ndarray[sel_col] == maxi)[0][0]
for name in ndarray.dtype.names:
mid.append(ndarray[name][maxi_index])
result.append(mid)
else:
mid = []
if i not in dupdup:
for name in ndarray.dtype.names:
mid.append(ndarray[name][i])
result.append(mid)
return np.asarray(result)
하지만, 무슨 일이 일어나고 있는지 중복이있을 때마다 else
부분을 제거해야합니다. 그렇지 않으면 오류가 발생하고 복제본이 없을 때마다 다시 넣어야합니다. 도움이 되시길 바랍니다. 긴 게시물에 대해 유감스럽게 생각합니다. 나는 내 자신을 분명히하기를 희망합니다.
이 결과는'col3'의 경우해야 우리가 이러한 항목이됩니다 :'1,2,3,2,1,4를, 5'? 그것은 min 요소보다 큰 모든 항목이어야합니까? – AndMar
질문에 표시되는 오류를 추가 할 수 있습니까?디버깅이 훨씬 쉬워집니다. – mfitzp