질문이 있으십니까?

기본 컨텐츠 및 사용자가 직접 참여하여 만들어진 다양한 내용을 검색합니다.

numpy 다차원배열 클래스 객체 유용한 메소드 20개 정리

다차원 배열은 numpy에서?

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

#윈도우즈 명령프롬프트에서 실행
c:\>pip install numpy

#라즈베리파이 라즈비안에서 실행
pi@raspberrypi:~ $ pip install numpy

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

넘파이 배열의 모양을 바꿀 때는 reshape 메소드를 사용할 수 있습니다. 모양이 바뀐 배열을 반환(return)해줍니다.
>>> import numpy as np
>>> A = np.array([1,2,3,4,5,6,7,8,9,10])
>>> print('A:', A)
A: [ 1 2 3 4 5 6 7 8 10 10]

>>> B = A.reshape(2,5) #reshape메소드
>>> print('B:',B)
B: [[ 1 2 3 4 5] [6 7 8 9 10]]

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

resize 메소드는 넘파이 배열의 모양뿐만 아니라 사이즈도 바꿔줍니다. 첫번째 원소부터 바뀐 모양에 채워넣어줍니다. 사이즈가 작아진 경우에는 뒷쪽 원소들이 제거되고, 사이즈가 커진 경우에는 뒷쪽에 0이 추가됩니다.
>>> import numpy as np
>>> A = np.array([[1,2,3,4,5,6],
              [7,8,9,10,11,12],
              [13,14,15,16,17,18],
              [19,20,21,22,23,24],
              [25,26,27,28,29,30],
              [31,32,33,34,35,36]])
>>> print('A:', A)
A: [[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]
 [13 14 15 16 17 18]
 [19 20 21 22 23 24]
 [25 26 27 28 29 30]
 [31 32 33 34 35 36]]

>>> A.resize(4,4)
>>> print('A:',A)
A: [[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

>>> A.resize(1,16)
>>> print('A:',A)
A: [[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16]]

>>> A.resize(2,5)
>>> print('A:',A)
A: [[ 1  2  3  4  5]
 [ 6  7  8  9 10]]

>>> A.resize(3,4)
>>> print('A:',A)
A: [[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10  0  0]]

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

>>> import numpy as np
>>> A = np.array([-3,4,-2,0,8,5,-6])
>>> print(A.max())
8

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

>>> import numpy as np
>>> A = np.array([-3,4,-2,0,8,5,-6])
>>> print(A.argmax())
4

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

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

7. sort 메소드: 정렬하기

>>> import numpy as np
>>> A = np.array([-3,4,-2,0,8,5,-6])
>>> A.sort()
>>> print(A)
[-6 -3 -2 0 4 5 8]

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

>>> import numpy as np
>>> A = np.array([-3,4,-2,0,8,5,-6])
>>> B = A.argsort() #정렬이후 각 원소의 인덱스가 원래 무엇인지 반환
>>> print(B)
[6 0 2 3 1 5 4]
#정렬할 경우 가장 작은 -6은 인덱스 6을 갖고
#두번째로 작은 -3은 인덱스 0을 갖기 때문에 위와 같은 결과가 반환

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

>>> import numpy as np
>>> A = np.array([-3,4,-2,0,8,5,-6])
>>> print('A:',A)
A: [-3 4 -2 0 8 5 -6]
>>> B = A.astype(float)
>>> print('B:',B)
B: [-3. 4. -2. 0. 8. 5. -6.]

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

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

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

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

>>> import numpy as np
>>> A = np.array([1,2,3,4,5,6,7])
>>> print('mean:', A.mean())
mean: 4.0
>>> print('var:', A.var())
var: 4.0
>>> print('std:', A.std())
std: 2.0
>>> print('sum:', A.sum())
sum: 28

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

>>> import numpy as np
>>> A = np.array([[1,4,6],
              [2,6,2],
              [3,8,5]])
>>> print('A:', A.trace()) #배열(행렬) A의 대각원소들인 1, 6, 5의 합 12
A: 12

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

>>> import numpy as np
>>> A = np.array([[1,2,3],
              [4,5,6]])
>>> print('A:', A.transpose())
A: [[1 4]
 [2 5]
 [3 6]]

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

#스칼라곱이라는 것은 벡터의 같은 위치에 있는 원소들끼리 곱해서 대해주는 것을 의미
>>> import numpy as np
>>> A = np.array([1,2,3])
>>> B = np.array([3,0,2])
>>> C = A.dot(B) #1*3 + 2*0 + 3*2 = 9
>>> print(C)
9
#9라는 결과는 1*3 + 2*0 + 3*2 = 9를 통해 나온 것입니다

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

>>> import numpy as np
>>> A = np.array([[1,2],[3,4]])
>>> B = A.prod(0) #열의 원소들을 곱해주고
>>> print(B)
[3 8]
>>> C = A.prod(1) #행의 원소들을 곱해주고
>>> print(C)
[ 2 12]
>>> D = A.prod() #전체원소들을 곱해주고
>>> print(D)
24

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

>>> import numpy as np
>>> A = np.array([[1,2,0,-3],
              [3,0,-2,5]])
>>> B = A.nonzero()
>>> print(B)
(array([0, 0, 0, 1, 1, 1], dtype=int32), array([0, 1, 3, 0, 2, 3], dtype=int32))
0, 0에 위치한 원소, 0, 1에 위치한 원소, 0, 3에 위치한 원소들이 0이 아니란 뜻입니다. 값이 0인 원소들을 제외하고 싶을때 nonzero와 같은 메소드를 사용기도 합니다.
>>> import numpy as np
>>> A = np.array([[1,2,0,-3],
              [3,0,-2,5]])
>>> B = A.nonzero()
>>> C = A[B] #배열 A에서 0인 원소들은 모두 제외된 결과가 도출
>>> print(C)
[ 1 2 -3 3 -2 5]

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

>>> import numpy as np
>>> A = np.array([[1,2,0,-3],
              [3,0,-2,5]])
>>> B = A.flatten() #2차원배열이 1차원으로 펼쳐졌다.
>>> print(B)
[ 1  2  0 -3  3  0 -2  5]

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

>>> import numpy as np
>>> A = np.array([1.5, 0.1, 2.9, -3.4])
>>> B = A.round() #배열의 요소들을 반올림
>>> print(B)
[ 2.  0.  3. -3.]

결론

유용한 메소드 20가지 정도 정리해봤습니다. 제가 말하고 싶은건, 파이썬 기본 알고리즘중에 배열(array) 처리 부분에 이렇게 편리한 많은 기능들을 부여한 NumPy라는 라이브러리 소개입니다. 파이썬의 매력은 여기에 있다 하겠습니다. 이런 커뮤니티가 발달되어, 파이썬으로 엄청나게 많은 일을 할 수 있으니까요.

댓글을 작성하세요

문서 이력

  • 2020-06-11 날짜로 신달수 님으로 부터 컨텐츠명이 변경 되었습니다.
  • 2020-06-11 날짜로 신달수 님께서 등록 작업을 하였습니다.
  • 2020-06-12 날짜로 신달수 님께서 수정 작업을 하였습니다.