작성
·
213
3
선생님 ~ 안녕하세요
sort_array1_desc = np.sort(org_array)[::-1] 해서
sort_array1_desc 를 보면 내림차순으로 잘 작동하는데..
그냥 org_array.sort()[::-1] 이렇게 해줄 때에는 오류가 나네요..ㅠ
내림차순일때는 sort_array1_desc = np.sort(org_array)[::-1] 이런식으로만 작성해야 하나요..??
답변 2
2
안녕하십니까,
sort()가 늘 파이썬, 넘파이에서 헷갈리는 부분이 있습니다. 대표적으로 sort()를 호출해서 반환이 될 때가 있고, 호출한 객체에 그대로 적용하는 부분이 있습니다.
np.sort(array)와 같이 numpy 의 sort()함수를 호출하게 되면 인자로 입력된 array를 복사해서 정렬해서 새로운 array를 반환해 줍니다. 즉 new_array = np.sort(org_array) 를 하게 되면 org_array 를 복사해서 이 값을 정렬한 후에 반환해 줍니다. 그래서 org_array자체는 정렬이 된 값으로 변하지 않지만 new_array는 org_array가 정렬된 새로운 array가 됩니다.
이와 유사하게 org_array.sort()와 같이 원본 array의 sort() 메소드를 호출하게 되면 원본 array의 값을 복사하지 않고 바로 sort를 적용합니다. 즉 원본 array의 값을 변화 시키게 됩니다. 그리고 반환은 하지 않습니다(결국 None값을 반환합니다). 때문에 org_array.sort()가 반환하는 값은 None이고 여기에 [::-1]을 적용하면 None값으로 인해서 오류가 발생합니다.
만약 원본 array의 내림차순 sort를 바로 적용하려면 org_array[::-1].sort() 과 같이 하면 됩니다.
감사합니다.
0