반응형
내적연산
- 베열 간의 곱셈에서는 요소별 연산과 벡터의 내적(dot product) 연산이 가능합니다.
- 두 개의 행렬에서 첫 번째 행렬의 열 크기와 두 번째 행렬의 행 크기가 동일 해야 합니다.
- m * n 행렬과 n * l 행렬, 벡터의 내적 연산은 m * l 의 행렬이 생성됩니다.
* 벡터의 내적 : 두 배열간의 곱셈
import numpy as np
x_1 = np.arange(1, 7).reshape(2, 3)
x_2 = np.arange(1, 7).reshape(3, 2)
print(x_1.dot(x_2))
# [[22 28]
# [49 64]]
x_1 = np.arange(1, 11).reshape(2, 5)
x_2 = np.arange(1, 16).reshape(5, -1)
print(x_1.dot(x_2))
# [[135 150 165]
# [310 350 390]]
Broadcasting operations(브로드 캐스팅 연산)
하나의 행렬과 스칼라 값들 간의 연산이나 행렬과 벡터 간의 연산
방송국의 전파가 퍼지듯 뒤에 있는 스칼라 값이 모든 요소를 연산합니다.
x = np.arange(1, 10).reshape(3, 3)
print(x + 10)
# [[11 12 13]
# [14 15 16]
# [17 18 19]]
print(x - 10)
# [[-9 -8 -7]
# [-6 -5 -4]
# [-3 -2 -1]]
print(x / 10)
# [[0.1 0.2 0.3]
# [0.4 0.5 0.6]
# [0.7 0.8 0.9]]
print(x * 10)
# [[10 20 30]
# [40 50 60]
# [70 80 90]]
print(x % 2)
# [[1 0 1]
# [0 1 0]
# [1 0 1]]
print(x + [10])
# [[11 12 13]
# [14 15 16]
# [17 18 19]]
print(x + [10, 11])
# ERROR
▶ 행렬과 스칼라 값 외에 행렬과 벡터, 벡터와 벡터 연산도 가능합니다.
x = np.arange(1, 13).reshape(4, 3)
v = np.arange(10, 40, 10)
print(x + v)
# [[11 22 33]
# [14 25 36]
# [17 28 39]
# [20 31 42]]
넘파이의 성능 비교
비교 연산
연산 결과는 항상 boolean type을 가진 배열로 추출합니다.
▶ 브로드캐스팅 비교 연산
- 하나의 스칼라 값과 벡터 간의 비교 연산은 벡터 내 전체 요소에 적용합니다.
x = np.array([4, 3, 2, 6, 8, 5])
print(x > 3)
# [ True False False True True True]
▶ 요소별 비교 연산
- 두 개의 배열 간 배열의 shape이 동일한 경우 같은 위치에 있는 요소들끼리 비교 연산합니다.
x = np.array([1, 3, 0])
y = np.array([2, 1, 7])
print(x > y)
# [False True False]
▶ all()
- 배열 내부의 모든 값이 참일 때 True, 하나라도 참이 아닐 경우 False 반환.
- and 조건을 전체 요소에 적용합니다.
▶ any()
- 배열 내부의 값 중 하나라도 참 일 때는 True, 모두 거짓일 경우 False 반환.
- or 조건을 전체 요소에 적용합니다.
x = np.array([4, 6, 7, 3, 2])
print(x > 3)
# [ True True True False False]
print((x > 3).all())
# False
print((x > 3).any())
# True
print((x < 10).any())
# True
print((x < 10).all())
# True
print((x > 10).any())
# False
인덱스 반환 함수
▶ where()
- 배열이 불인형으로 이루어졌을 때 참인 값들의 인덱스를 반환합니다.
- True/False 경우 값을 지정할 수 없습니다.
x = np.array([4, 6, 7, 3, 2])
print(x > 5)
# [False True True False False]
print(np.where(x > 5))
# (array([1, 2]),)
print((np.where(x>5, 10, 20))) # 조건이 참이면 10, 거짓이면 20 반환.
# [20 10 10 20 20]
정렬된 값의 인덱스를 반환해주는 함수
▶ argsort
- 배열 내 값들을 작은 순서대로 인덱스를 반환합니다.
▶ argmax
- 배열 내 값들 중 가장 큰 값의 인덱스를 반환합니다.
▶ argmin
- 배열 내 값들 중 가장 큰 작은 값의 인덱스를 반환합니다.
x = np.array([4, 6, 7, 3, 2])
print(np.argsort(x))
#[4 3 0 1 2]
print(np.argmax(x))
# 2
print(np.argmin(x))
# 4
인덱스를 활용한 데이터 추출
▶ boolean index
- 배열에 있는 값들을 반환할 특정 조건을 boolean형의 배열에 넣어서 추출합니다.
- 인덱스에 들어가는 배열은 boolean type이어야 합니다.
- boolean type과 추출 대상이 되는 array의 shape이 같아야 합니다.
x = np.array([4, 6, 7, 3, 2])
cond = x > 3
print(x[cond])
# [4 6 7]
print(x.shape)
# (5,)
print(cond.shape)
# (5,)
▶ fancy index
- 정수형 배열의 값을 사용하여 해당 정수의 인덱스에 위치한 값을 반환합니다.
- 인덱스 항목에 넣을 배열은 정수로만 구성되어야 합니다.
- 정수 값의 범위는 대상이 되는 배열이 가지는 인덱스의 범위 내 대상이 되는 배열과 인덱스 배열의 구조가 같은 필요는 없습니다.
x = np.array([4, 6, 7, 3, 2])
cond = np.array([1, 2, 0, 2, 2, 2,], int)
print(x[cond])
# [6 7 4 7 7 7]
print(x.take(cond))
# [6 7 4 7 7 7]
x = np.array([[1, 4], [9, 16]], int)
a = np.array([0, 1, 1, 1, 0, 0] , int)
b = np.array([0, 0, 0, 1, 1, 1], int)
print(x[a, b])
# [ 1 9 9 16 4 4]
반응형
'Python' 카테고리의 다른 글
[Python] Pandas (0) | 2022.09.27 |
---|---|
[Python] 파일 저장 (0) | 2022.09.27 |
[Python] numpy (0) | 2022.09.22 |
[Python] Anaconda 가상환경 생성 (0) | 2022.09.21 |
[Python] CRAWLING - Element Access (0) | 2022.09.16 |