-
numpy 배열 중요 특징 및 Indexingpython 2023. 3. 25. 23:10
numpy 특징¶
- Numerical Python의 약자
- 고성능 과학 계산용 패키지로 강력한 N차원 배열 객체
- 범용적 데이터 처리에 사용 가능한 다차원 컨테이너
- 정교한 브로드캐스팅(broadcasting) 기능
- 파이썬의 자료형 list와 비슷하지만, 더 빠르고 메모리를 효율적으로 관리
- 반복문 없이 데이터 배열에 대한 처리를 지원하여 빠르고 편리
- 데이터 과학 도구에 대한 생태계의 핵심을 이루고 있음
배열의 특징¶
- 배열은 같은 종류의 데이터만 담을 수 있다.
- 내부 연산은 C 언어로 작성됨.
1. Fancy Indexing : 배열 인덱스에 다른 배열을 전달해서 원하는 요소를 선택하는 방법
In [1]:import numpy as np a = np.arange(5) a
Out[1]:array([0, 1, 2, 3, 4])
In [3]:print(a[[1,3]]) print(a[[True, False, True, False, True]])
[1 3] [0 2 4]
In [5]:a = np.arange(10) print(a) b = a > 5 print(b) print(a[b])
[0 1 2 3 4 5 6 7 8 9] [False False False False False False True True True True] [6 7 8 9]
In [6]:a[a>5] = 1 print(a)
[0 1 2 3 4 5 1 1 1 1]
In [10]:b = np.arange(12).reshape(3,4) print(b) print('b[[0,2]]>>>>\n',b[[0,2]]) print('b[[0,2],[2,3]]>>>>',b[[0,2],[2,3]])
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] b[[0,2]]>>>> [[ 0 1 2 3] [ 8 9 10 11]] b[[0,2],[2,3]]>>>> [ 2 11]
In [11]:b = np.arange(48).reshape(3,4,4) print(b)
[[[ 0 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 37 38 39] [40 41 42 43] [44 45 46 47]]]
In [17]:b[[1,2],1:3,:][:,1,[2,3]]
Out[17]:array([[20, 21, 22, 23], [44, 45, 46, 47]])
2. 배열 Indexing and Slicing
In [19]:a = np.arange(12).reshape(3,4) print(a) print(a[:2,:]) print(a[:,:3])
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[0 1 2 3] [4 5 6 7]] [[ 0 1 2] [ 4 5 6] [ 8 9 10]]
In [20]:# 증가치를 적용하여 요소 가져오기 b = np.arange(12) print(b) print(b[::2]) # 역순으로 가져오기 print(b[::-1]) # 역순으로 -2 증가하면서 가져오기 print(b[::-2])
[ 0 1 2 3 4 5 6 7 8 9 10 11] [ 0 2 4 6 8 10] [11 10 9 8 7 6 5 4 3 2 1 0] [11 9 7 5 3 1]
In [22]:# 모든 차원에 ... , :: c = np.arange(24).reshape(4,3,2) print(c) print(c[2,...]) # c[2,::] , c[2,:], c[2,:,:]
[[[ 0 1] [ 2 3] [ 4 5]] [[ 6 7] [ 8 9] [10 11]] [[12 13] [14 15] [16 17]] [[18 19] [20 21] [22 23]]] [[12 13] [14 15] [16 17]]
3.Broadcasting 연산
- 연산 제약 조건
- 배열과 스칼라 연산인 경우
- 배열 간 연산일 경우에는 shape 동일하거나 둘 중 하나가 1차원이면서 1차원 배열의 축의 길이가 같아야 함.
- numpy document
General Broadcasting Rules When operating on two arrays, NumPy compares their shapes element-wise.
It starts with the trailing (i.e. rightmost) dimension and works its way left. Two dimensions are compatible when
- they are equal, or
- one of them is 1.
- A (2d array): 5 x 4
- B (1d array): 1
- Result (2d array): 5 x 4
- A (2d array): 5 x 4
- B (1d array): 4
- Result (2d array): 5 x 4
- A (3d array): 15 x 3 x 5
- B (3d array): 15 x 1 x 5
- Result (3d array): 15 x 3 x 5
- A (3d array): 15 x 3 x 5
- B (2d array): 3 x 5
- Result (3d array): 15 x 3 x 5
- A (3d array): 15 x 3 x 5
- B (2d array): 3 x 1
- Result (3d array): 15 x 3 x 5 </p>
In [25]:# scalar a = np.arange(9).reshape(3,3) a+2
Out[25]:array([[ 2, 3, 4], [ 5, 6, 7], [ 8, 9, 10]])
In [28]:#element-wise a = np.arange(4).reshape(2,2) b = np.arange(4,8).reshape(2,2) a*b
Out[28]:array([[ 0, 5], [12, 21]])
In [37]:# 1 차원 포함 a = np.ones((2,3), dtype=np.int32) print(a) b = np.ones((1,2), dtype=np.int32) print(b) #a+b >>> error b = np.ones((1,3), dtype=np.int32) print(a+b) b = np.ones((2,1), dtype=np.int32) print(a+b)
[[1 1 1] [1 1 1]] [[1 1]] [[2 2 2] [2 2 2]] [[2 2 2] [2 2 2]]
In [ ]:'python' 카테고리의 다른 글
[Linux]matplotlib 에서 한글 깨짐 현상 (0) 2023.04.13 Ubuntu 20.04 python 3.11 upgrade 하기 (0) 2023.03.21 Python 에서 결측값(Missing Value)이란? (0) 2023.03.04 numpy slice 색인 접근 문법 (1) 2023.03.04 anaconda + VS code 개발환경 #1 (0) 2023.02.18