2017-02-20 7 views
-1
def dot(x, y): 
    return sum([ x[i]*y[i] for i in range(1,10)]) 

def magnitude(x): 
    return math.sqrt(sum([x[i]*x[i] for i in range(1,10)])) 

def cosine_similarity(x, y): 
    x = dot(x, y)/(magnitude(x)*magnitude(y)) 
    print(x) 
    print(math.acos(x)) 
    return math.acos(x)/math.pi 

이것은 내 파이썬 코드입니다. 두 벡터 사이의 각도를 목록으로 표시하려고합니다. 이 코드를 실행하면 출력은 다음과 같습니다파이썬 math.acos의 도메인 오류가 유효한 입력 인 경우

1.0 
Traceback (most recent call last): 
    File "problem5.py", line 64, in <module> 
    print(cosine_similarity(reservoir[0][0], reservoir[0][0])) 
    File "problem5.py", line 41, in cosine_similarity 
    print(math.acos(x)) 
ValueError: math domain error 

내가 math.acos (1.0) 내 콘솔에 입력하거나 파일을 경우 정확하게 내게 유형 검사 등을 수행 한 0을 제공하고 모든 것 체크 아웃.

+0

'x'매개 변수를 덮어 쓰고 있습니다. 그것을 피하십시오 –

+0

해당 코드를 실행해도 아무 것도 보이지 않습니다. 'cosine_similarity()'함수를 호출하고 에러를주는 코드를 보여주십시오. 참조 [최소의 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve). –

+0

어떤 버전의 파이썬입니까? –

답변

0

반올림 문제가 발생했습니다. x은 부동 소수점 올림 오류로 인해 1.0000000000000002과 같은 값을 취할 수 있으므로 오류가 발생합니다. math.acosnumpy.acos으로 대체하면 추가되는 내용을 자동으로 관찰 할 수 있습니다.