2015-01-30 6 views
-1

현재 거리에 따라 데이터 포인트를 정렬해야하는 클러스터링 알고리즘에 대한 데이터 세트를 작업 중입니다 데이터 유형은 ndarray입니다 (n 차원 배열)람다를 사용하는 동안 목록을 호출 할 수 없습니다.

import numpy as np 
data = np.genfromtxt(fname="irisdataset.txt",delimiter="") 

def sort_by_distance(data): 

    sum = 0 
    for point in data: 
     sum += point*point 
    return np.sqrt(sum) 

sorted(data,key=[lambda x:sort_by_distance(x) for x in data]) 

내가 여기에 오류가 :

Traceback (most recent call last): 
    File "C:/Users/abdullah/MainProject/load.py", line 13, in <module> 
    sorted(data,key=[lambda x:sort_by_distance(x) for x in data]) 
TypeError: 'list' object is not callable 

임 그래서 누군가가 그냥이 오류가 이유를 알려 파이썬에 새로운

+0

또한 함수를'np.sqrt (sum ([i ** 2 in i for data])'로 반환 할 수 있습니다. – karthikr

답변

2

당신이있어 GET sorted의 키 인수로 목록을 전달하기 때문에 오류가 발생했습니다. 그러나 sorted은 키 인수가 함수이 될 것으로 예상합니다.

data (구조)에 대해 알지 못하는 사이에 문제를 해결하는 방법을 말하는 것이 어렵습니다.

data = np.array([[1, 2], [3, 4], ...]) 

하고 원점에서 거리에 의해 각각의 "포인트"를 정렬하려면 : 내 생각 엔 data 이런 식으로 뭔가를 보이는 것입니다. 이 경우 np.dot은 훌륭한 키 기능이어야합니다.

print sorted(data, key=np.dot)