1. 브로드캐스팅(Broadcasting)
- 일반적으로 numpy는 모양이 다른 배열끼리는 연산이 불가능하다. 브로드캐스팅은 어떤 조건만 만족한다면 모양이 다른 배열끼리의 연산도 가능하게 해주며 모양이 부족한 부분은 확장하여 연산을 수행할 수 있도록 한다는 것이라고 생각할 수 있다.
- 브로드캐스팅이 일어날 수 있는 조건은 다음과 같다.
- 차원의 크기가 1일때 가능하다 두 배열 간의 연산에서 최소한 하나의 배열의 차원이 1이라면(0번 축이든 1번 축이든; 1행이든 1열이든) 가능하다.
- 차원의 짝이 맞을 때 가능하다 차원에 대해 축의 길이가 동일하면 브로드캐스팅이 가능하다.
# 2x2, 1x1 행렬
a = np.array([[1,2],[3,4]])
a
[out]
array([[1, 2],
[3, 4]])
# 2x2, 1x1 행렬의 브로드 캐스팅
a = np.array([[1,2],[3,4]])
a * 10
[out]
array([[10, 20],
[30, 40]])
# 2x2, 1x2 행렬의 브로드 캐스팅
****a = np.array([[1,2],[3,4]])
b = np.array([10,20])
a * b # b가 a와 똑같은 shape으로 변형된후 원소별 연산이 이루어진것이다
[out]
array([[10, 40],
[30, 80]])
2. 슬라이싱 (Slicing)
[start index : end index] : 시작 인덱스부터 끝 인덱스 -1까지 리턴
nptest=np.arange(0,12).reshape(3,4) # 0~11 3x4형태로 배열 생성
nptest
=>array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 인덱스
nptest[1][0] # 1행의 0열 인덱스
=>4
# 인덱스로 슬라이스하기
nptest[1] # 1행
=>array([4, 5, 6, 7])
✔️ 범위로 슬라이스하기
# 범위로 슬라이스하기 [시작:끝]
nptest[1:] # 인덱스[1]부터 끝까지
=>array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 전체다 [:]
nptest[:]
=>array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 뒤에서부터 슬라이스 [음수로시작:]
nptest[-1:] # 제일 마지막행
=>array([[ 8, 9, 10, 11]])
# 열 한개만 슬라이스 [:,열]
nptest[:,2] # 2열만
=>array([ 2, 6, 10])
# 열블럭1 [:,열시작:열끝]
nptest[:,2:] # 2열부터 끝까지
=>array([[ 2, 3],
[ 6, 7],
[10, 11]])
# 열 처음부터 끝까지 [:,:]
nptest[:,:]
=>array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 행, 열 지정해서 슬라이스
nptest[1:,[1,3]] # 1행부터끝까지, 1열과 3열 추출
=>array([[ 5, 7],
[ 9, 11]])
# 행, 열 지정해서 슬라이스(음수로)
nptest[-1:,[1,3]] # -1은 제일마지막행
=>array([[ 9, 11]])
3. 인덱싱 (Indexing)
팬시 인덱싱(Fancy indexing)
: 일정한 인덱싱 집합을 리스트 또는 ndarray로 지정해 해당 위치에 있는 데이터의 ndarray를 반환
✔️팬시 인덱싱 기본 예제
array1 = np.arange(1,10)
array2 = array1.reshape(3,3)
array2
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
array3 = array2[[0,1,2],2] # 0,1,2번째 row의 2번째 인덱스
array3
# array([3, 6, 9])
array4 = array2[[0,1,2],0:2] # 0,1,2번째 row의 0부터 1까지 인덱스
array4
# array([[1, 2],
# [4, 5],
# [7, 8]])
array5 = array2[[0,1]] # 0,1번째 row추출
array5
# array([[1, 2, 3],
# [4, 5, 6]])
불린 인덱싱(Boolean indexing)
: 특정 조건에 해당하는지 여부인 True/False 값 인덱싱 집합을 기반으로 True에 해당하는 인덱스 위치에 있는 데이터의 ndarray를 반환. 매우 자주 사용
✔️불린 인덱싱 기본 예제
array1 = np.arange(1,10)
# []안에 array1>5 Boolean indexing 적용
array2 = array1[array1 > 5]
print('array1>5 불린 인덱싱 값:', array2)
# array1>5 불린 인덱싱 값: [6 7 8 9]
'🛠️Skill > Python' 카테고리의 다른 글
[Python] 데이터 합치기 Join, merge, concat (0) | 2022.10.11 |
---|---|
[Python] 클래스(class) / 인스턴스, 객체, self, super 이해하기 (0) | 2022.10.05 |
[Python] Function/가변인자, 지역변수, 전역변수, 사용자 입력 함수 input (0) | 2022.10.03 |
[Python] 리스트,튜플,딕셔너리,세트/ 연산자/ if,for문 (0) | 2022.10.02 |
[Python] Numpy란? 배열생성,차원변경/ 행렬곱(내적dot)/ 원소접근 (0) | 2022.10.02 |
댓글