SiLaure's Data
[Numpy] 03. Array Operation(Broadcast, Universal Function) 본문
Records of/Learning
[Numpy] 03. Array Operation(Broadcast, Universal Function)
data_soin 2021. 7. 23. 16:56- Array Operation (like vector) --> Universal Function
- numpy array를 쓰는 가장 큰 이유는 vector처럼 사용할 수 있기 때문이다.
e.g. arr1 = np.array([1, 2, 3, 4, 5]) --> (1, 2, 3, 4, 5) == vector
- 그렇기 때문에 scipy, matplotlib, scikit-learn, pandas, tensorflow, pytorch 등 대부분의 데이터분석 라이브러리들이 numpy array를 사용한다.
- 대부분의 데이터 분석 라이브러리들은 벡터를 사용하는데, 그 벡터가 바로 numpy array로 표현되기 때문.
- 데이터 분석은 99.9% 데이터를 벡터로 표현하여 분석하기 때문에, 이 특징은 굉장히 중요하다.
벡터 == numpy array
A + B = (3, 3)
A - B = (-1, 1)
A o B = 1x2 + 2x1 = 4 (dot product)
1. vector 2개 생성하기
v1 = np.array((1, 2, 3))
v2 = np.array((4, 5, 6))
type(v1), type(v2)
출력 : (numpy.ndarray, numpy.ndarray)
2. 리스트로 더하기 연산해보기
t1 = (1, 2, 3)
t2 = (4, 5, 6)
#type(t1), type(t2)
t1 + t2
출력 : (1, 2, 3, 4, 5, 6)
3. 여러가지 연산들
# vector addition
v1 + v2
array([5, 7, 9])
-
# vector subtraction
v1 - v2
array([-3, -3, -3])
v1 * v2
# vector는 곱하기, 나누기가 없기 때문에 원소 간 연산으로 봐야 한다.
# (not vector operation) elementwise multiplication --원소 간 연산
v1 * v2
array([ 4, 10, 18])
# (not vector operation) elementwise division
v1 / v2
array([0.25, 0.4 , 0.5 ])
# dot product
v1 @ v2
# 1*4 + 2*5 + 3*6
32
vector는 곱하기, 나누기가 없기 때문에 원소 간 연산으로 봐야 한다.
- Broadcast
- 서로 크기가 다른 numpy array를 연산할 때, 자동으로 연산을 전파(broadcast)해주는 기능.
- 전파가 확장되면 행렬곱 연산을 할 때 편리하다.
# 다치원 array에 확장
arr1 = np.array([[1, 2, 3],
[4, 5, 6]])
arr1.shape
--(2, 3)
arr2 = np.array([7, 8, 9])
arr2.shape
--(3,)
# 2개의 array를 더해보면?
arr1 + arr2
# [1, 2, 3] + [7, 8, 9] , [4, 5, 6] + [7, 8, 9]
--array([[ 8, 10, 12],
[11, 13, 15]])
# 2개의 array를 곱해보면? (**)
arr1 * arr2 # [1, 2, 3] * [7, 8, 9] , [4, 5, 6] * [7, 8, 9]
--array([[ 7, 16, 27],
[28, 40, 54]])
# vector scalar multiplication
# arr1에 10을 곱해보면?
arr1 * 10 # vector scalar multiplication
--array([[10, 20, 30],
[40, 50, 60]])
# arr1을 제곱해보면?
arr1 * arr1
array([[ 1, 4, 9],
[16, 25, 36]])
np.array의 제곱은 ^2아닌 두 번 곱하는 것이다. (값이 다름)
- Universal Functions
- numpy array는 하나의 함수를 모든 원소에 자동으로 적용해주는 Universal Function이라는 기능을 제공한다.
- 이로 인해 모든 원소에 대해 같은 작업을 처리할 때 엄청나게 빠른 속도를 낼 수 있다.
1. no.array를 생성하고 실수 타입으로 변환하기
arr1 = np.array([1, 2, 3], dtype=float)
int와 int 사이의 연산에서 오직 나눗셈만 결과값이 실수로 변환된다.
위에서는 dtype을 따로 정해주었지만, 1로 나누면 따로 지정하는 대신 간단하게 변환할 수 있다.
arr1 = np.array([1, 2, 3])
arr1 = arr1 / 1
arr1.dtype
출력 : dtype('float64')
2. 모든 원소의 역수 구하기
for x in arr1 :
x = 1 /x
L.append(x)
np.array(L)
각 원소에 1 / 라는 operation을 모두 적용하는 연산이 된다.
1 / arr1
출력 : array([1. , 0.5 , 0.33333333])
3. 모든 원소에 2를 더하기
arr1 + 2
출력 : array([3., 4., 5.])
'Records of > Learning' 카테고리의 다른 글
[Numpy] 06. Array Aggregation functions (0) | 2021.07.25 |
---|---|
[Numpy] 05. Array Functions(함수) (0) | 2021.07.25 |
[Numpy] 02. Array 만들어보기 (0) | 2021.07.23 |
[Numpy] 01. Numpy란? (0) | 2021.07.23 |
[Python] 15-2. Python 데이터 입출력(I,O) (2) (0) | 2021.07.23 |
Comments