abt Python/심화
Numpy 배열 연산, 인덱싱, 슬라이싱
cloudin
2023. 8. 14. 10:45
Numpy 배열 연산
- 단순 연산 기호
기호 & 메서드 | 내용 | 기호 & 메서드 | 내용 |
+ | 더하기 | - | 빼기 |
* | 곱셈 | ** | 거듭제곱 |
/ | 나누기 | >,<,>=,<= | 비교연산자 |
sum() | 합 | mean() | 평균 |
std() | 표준편차 | var() | 분산 |
min() | 최솟값 | max() | 최대값 |
cumsum() | 누적합 | cumprod() | 누적 |
- 선형대수를 위한 행렬 연산
사용 예 | 내용 |
A.dot(b) np.dot(A,B) |
행렬곱(matrix product) |
A.transpose() np.transpose(A) |
전치행렬(transpose matrix) |
np.linalg.inv(A) | 역행렬(inverse matrix) |
np.linalg.det(A) | 행렬식(determinant) |
인덱싱 : 배열의 위치나 조건을 지정해 배열의 원소를 선택
- 생성한 배열에서 원하는 값을 인덱스를 활용하여 선택 실습
index1 = np.array([0, 10, 20, 30, 40, 50])
index1
# array([ 0, 10, 20, 30, 40, 50])
index1[0] # index1의 첫 번째 값
# 0
index1[4] # index1의 인덱스 4에 위치한 값
# 40
index1[[0,2,4]] # 원하는 벡터의 값을 선택하여 뽑을 때
# array([ 0, 20, 40])
# 10부터 100 미만까지의 값들 중 10씩 증가하는 값들 선택하여 3x3 행렬
index2 = np.arange(10, 100, 10).reshape(3,3)
index2
# array([[10, 20, 30],
# [40, 50, 60],
# [70, 80, 90]])
# 원하는 위치의 값 (0행 2열)
index2[0,2]
# 30
- 배열에서 원하는 값을 인덱스를 활용하여 값 변경 실습
index1[5] = 100 # 5번째 값을 100으로 바꾸고 싶다
index1
# array([ 0, 10, 20, 30, 40, 100])
index2[2,2]=99
index2 # index2의 2행 2열 값을 99로 변경
# array([[10, 20, 30],
# [40, 50, 60],
# [70, 80, 99]])
# 행을 통째로 바꾸고 싶을 때
index2[1]=[44,57,66] # 1행을 바꿔줌
index2
# array([[10, 20, 30],
# [44, 57, 66],
# [70, 80, 99]])
- 행렬에서 인덱스 의미
배열명[[첫번째데이터행, 두번째데이터행, 세번째데이터행 ..], [첫번째데이터열, 두번째데이터열, 세번째데이터열..]]
index2[[0,2], [0,1]]
# array([10, 80])
index2[[0,2,2], [0,1,2]]
# array([10, 80, 99])
- 조건 인덱싱
index = np.array([1,2,3,4,5,6])
index[index > 3] # index 값 중 3 초과 값만 추출
# array([4, 5, 6])
index[(index % 2) == 0] # index 값 중 짝수 값만 추출
# array([2, 4, 6])
슬라이싱 : 범위를 지정해 배열의 일부분을 선택하는 방법
- 생성한 배열에서 슬라이싱을 이용하여 배열 일부분 선택
# 슬라이싱을 활용하여 연속된 값 추출
slice1 = np.array([0,10,20,30,40,50])
slice1[1:5] # 10~40 추출
# array([10, 20, 30, 40])
slice1[:3] # 처음부터 3미만 인덱스에 해당하는 값 추출
# array([ 0, 10, 20])
slice1[2:] # 인덱스2부터 끝까지
array([20, 30, 40, 50])
- 슬라이싱을 이용하여 배열의 값을 바꾸고 싶을 때
slice1[2:5] = np.array([25,35,45]) # slice1의 2,3,4인덱스에 해당하는 값을 25, 35, 45로 바꿈
slice1
# array([ 0, 10, 25, 35, 45, 50])
slice1[3:6] = 60 # 해당하는 인덱스의 값들을 하나의 값으로 바꾸기
slice1
# array([ 0, 10, 25, 60, 60, 60])
- 행렬 슬라이싱
# 행렬
slice2 = np.arange(10, 100, 10).reshape(3,3)
slice2
# array([[10, 20, 30],
# [40, 50, 60],
# [70, 80, 90]])
# 원하는 값 뽑아내기
slice2[1:3, 1:3] # [행, 열]
# array([[50, 60],
# [80, 90]])
slice2[:3, 1:]
# array([[20, 30],
# [50, 60],
# [80, 90]])
# 값을 변경
slice2[0:2, 1:3] = np.array([[25,35], [55,65]])
slice2
# array([[10, 25, 35],
# [40, 55, 65],
# [70, 80, 90]])