더북(TheBook)

그리고 for 루프를 돌면서 박쥐와 기존 동물 간의 거리를 구한다. 구한 거리와 동물 정보는distances 리스트에 추가한다. 거리만 저장하면 어느 동물과 가까운지 알 수 없으므로 동물과 거리를 같이 저장한다.

distances = [ ]
for animal in zoo:

# 박쥐와 기존 동물 간의 거리를 구한다
    d = euclidean_distance( bat, animal )

# 동물과 거리를 튜플로 묶어 distances 리스트에 같이 저장한다
    distances.append( ( animal, d ) )

이렇게 모든 거리를 구한 후 거리가 짧은 순서대로 정렬한다.

distances.sort( key=lambda tup: tup[ 1 ] )

가장 가까운 이웃 세 개만 고른다(k = 3). 따라서 k만큼만 출력한다.

k = 3
for i in range( k ):
    print( distances[ i ] )

출력하면 결과는 다음과 같다. ( ) 안에 [ ]는 동물을, 숫자는 박쥐와의 거리를 의미한다([ ] 안은 동물의 특성 #1, 특성 #2, 분류다).

결과

( [3.39, 4.4, 0], 0.5586591089385372)
( [3.06, 3.0, 0], 1.0017983829094554)
( [2.78, 2.55, 0], 1.4665946952038251)

zoo 데이터를 만들 때 분류가 0이면 포유류, 1이면 조류라고 약속했다. 가장 가까운 동물 셋의 분류가 모두 0, 즉 포유류이므로 박쥐도 포유류일 가능성이 크다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.