2020-04-13 08:53:30

넘파이의 ndarray(n-dimensional array, n차원 배열) 클래스 객체는 많은 유용한 메소드들을 갖고 있습니다. 여기서 메소드라는 것은 클래스 내에 선언된 함수를 의미합니다. 메소드라는 용어가 낯선 분들은 메소드가 그냥 함수를 의미한다고 생각하시면 됩니다. 그래도 전혀 틀리지 않습니다. 오늘은 ndarray 클래스 객체의 메소들 중에 유용한 것들을 소개해드리도록 하겠습니다. 넘파이 패키지에 의존하기 때문에 설치를 안하신 분들은 설치해주셔야 합니다. pip install numpy 또는 conda install numpy와 같이 타이핑해주시면 설치가능합니다. 

 

 

1. reshape 메소드: 배열 모양 바꾸기

넘파이 배열의 모양을 바꿀 때는 reshape 메소드를 사용할 수 있습니다. 모양이 바뀐 배열을 반환(return)해줍니다. 

 

 

2. resize 메소드: 배열의 모양과 사이즈 바꾸기

resize 메소드는 넘파이 배열의 모양뿐만 아니라 사이즈도 바꿔줍니다. 첫번째 원소부터 바뀐 모양에 채워넣어줍니다. 사이즈가 작아진 경우에는 뒷쪽 원소들이 제거되고, 사이즈가 커진 경우에는 뒷쪽에 0이 추가됩니다. 

 

 

3. max 메소드: 원소들 중 최대값을 반환

 

 

4. argmax 메소드: 최대값을 갖는 인덱스를 반환

배열 중 몇 번째 원소가 최대값인지를 알려주는 메소드입니다. 

 

여기서 4가 나온 이유는 파이썬에서 배열의 원소 인덱스는 0, 1, 2, 3,... 이런 식으로 0부터 세기 때문입니다. 따라서 5번째 원소인 8은 4라는 인덱스값을 갖는 것이죠. 

 

 

5. min 메소드: 원소들 중 최소값을 반환

6. argmin 메소드: 최소값을 갖는 인덱스를 반환

min 메소드와 argmin 메소드는 max 메소드와 argmax 메소드와 사용법에 있어 상통하므로 예제는 생략하겠습니다. 

 

7. sort 메소드: 정렬하기

오름차순으로 배열의 원소들을 정렬할 수 있습니다. 

 

 

8. argsort 메소드: 정렬된 배열 원소들의 인덱스를 반환 

arg가 들어가면 보통 인덱스와 관련되어있습니다. argsort는 정렬 이후 각 원소의 인덱스가 원래 무엇인지를 반환해줍니다. 

 

 

정렬할 경우 가장 작은 -6은 인덱스 6을 갖고, 두번째로 작은 -3은 인덱스 0을 갖기 때문에 위와 같은 결과가 반환되었습니다. 

 

9. astype 메소드: 특정 자료형으로 변환

배열을 복사한 다음에 자료형을 바꿔줍니다. 자료형을 바꿔주는 것을 영어로는 cast라고 합니다.  

 

배열 원소의 자료형이 int32에서 float64로 바뀐 것을 확인하실 수 있습니다. 

 

10. mean 메소드: 배열 원소들의 평균

11. var 메소드: 배열 원소들의 분산

12. std 메소드: 배열 원소들의 표준편차

13. sum 메소드: 배열 원소들의 합

10, 11, 12, 13은 간단하니 한번에 예제로 보여드리겠습니다.

 

 

손으로 계산해보셔도 동일한 결과가 나옵니다. 

 

14. trace 메소드: 배열의 대각 원소들의 합

 

 

배열(행렬) A의 대각원소들인 1, 6, 5의 합인 12가 잘 출력된 것을 확인하실 수 있습니다. 

 

15. transpose 메소드: 전치행렬 반환

 

 

16. dot 메소드: 두 배열의 점곱(스칼라곱) 시행

스칼라곱이라는 것은 벡터의 같은 위치에 있는 원소들끼리 곱해서 대해주는 것을 의미합니다. 

 

 

9라는 결과는 1*3 + 2*0 + 3*2 = 9를 통해 나온 것입니다. 

 

17. prod 메소드: 행렬의 행 요소들을 곱, 또는 열 요소들을 곱, 또는 전체 요소들을 곱

0을 전달해줬을 때는 열의 원소들을 곱해주고, 1을 전달했을 때는 행의 원소들을 곱해주고, 아무것도 전달하지 않았을 때는 전체 원소들을 곱해줍니다. 

 

 

18. nonzero 메소드: 0이 아닌 원소들의 인덱스 반환

 

 

이 결과는 다음과 같이 해석해야합니다. 

 

 

0, 0에 위치한 원소, 0, 1에 위치한 원소, 0, 3에 위치한 원소들이 0이 아니란 뜻입니다. 값이 0인 원소들을 제외하고 싶을때 nonzero와 같은 메소드를 사용기도 합니다. 

 

 

이렇게 해주면 배열 A에서 0인 원소들은 모두 제외된 결과가 도출되죠. 

 

19. flatten 메소드: 1차원으로 펼치기

 

 

2차원 배열이 1차원으로 펼쳐졌습니다. 

 

20. round 메소드: 배열 요소들 반올림

 

 

배열의 요소들이 반올림된 것을 확인하실 수 있습니다. 

 

지금까지 numpy.ndarray 클래스 객체의 20가지 유용한 메소드에 대해 정리해봤습니다. 사실 코딩을 위해서 많은 함수들 및 메소드들을 외울 필요는 없습니다. 갯수가 거의 무한개이기도 하고, 또한 검색하면 다 찾을 수 있기 때문입니다. 하지만 중요한 것들은 대강이라도 인지하고 계신다면 시간을 많이 단축시킬 수 있습니다. 

 

 

bskyvision의 추천글 ☞

[python] 파이썬 유용한 내장 함수들 10개 정리

[python] numpy 패키지 유용한 함수들 10개 정리

[python] opencv-python 패키지 유용한 함수 10개 정리

 

 

<참고자료>

[1] https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html, SciPy.org, "numpy.ndarray"