본문 바로가기
Python/NumPy

[NumPy] 배열 연산 - (1)

by _sweep 2022. 2. 5.

이수안컴퓨터연구소NumPy 한번에 끝내기 영상을 보고 정리한 내용입니다.

 

 

 배열 연산

NumPy의 배열 연산은 벡터화 연산(vectorized)을 사용한다.

일반적으로 NumPy의 범용 함수(universal functions)를 통해 구현하며 배열 요소에 대한 반복적인 계산을 효율적으로 수행할 수 있다.

 

 

 브로드캐스팅

브로드캐스팅(Broadcasting)은 NumPy가 산술 연산 중 다른 모양의 배열을 처리하는 방법이다.

특정 제약 조건에 따라 더 작은 array는 호환되는 모양을 갖도록 더 큰 array에 대해 브로드캐스팅된다.

즉, 산술 연산을 하고 싶은 두 피연산자 배열이 각기 다른 shape을 가지고 있어도 산술 연산을 할 수 있게끔 shape이 동일하게 맞춰진다.

 

브로드 캐스팅 예시

 

a1 = np.array([1, 2, 3])
print(a1 + 5)

# output
# [6 7 8]

 

a2 = np.arange(1, 10).reshape(3,3)
print(a1)
print(a2)
print(a1 + a2)

# output
# [1 2 3]
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
# [[ 2  4  6]
#  [ 5  7  9]
#  [ 8 10 12]]

 

b2 = np.array([1, 2, 3]).reshape(3,1)
print(a2)
print(b2)
print(a2 + b2)

# output
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
# [[1]
#  [2]
#  [3]]
# [[ 2  3  4]
#  [ 6  7  8]
#  [10 11 12]]

 

 

 산술 연산

NumPy에서의 산술 연산(Arithmetic Operators)은 연산자와 범용 함수 모두 사용 가능하다.

산술 연산의 연산자와 범용 함수는 다음과 같다.

 

연산자 범용함수 설명
+ np.add 덧셈
- np.substract 뺄셈
- np.negative 단항 음수
* np.multiply 곱셈
/ np.divide 나눗셈
// np.floor_divide 나눗셈 내림
% np.mod 나머지연산
** np.power 지수 연산

 

✔️ 절대값

절대값 함수로는 np.absolute()가 있는데 이를 줄여서 np.abs()로도 사용 가능하다.

 

a1 = np.random.randint(-10,10,size=5)
print(a1)
print(np.abs(a1))

# output
# [ -4   3  -9   8 -10]
# [ 4  3  9  8 10]

 

✔️ 제곱/제곱근

제곱 함수 np.square()이고 제곱근 함수는 np.sqrt()이다.

 

a1 = np.arange(1,10)
print(np.square(a1))
print(np.sqrt(a1))

# output
# [ 1  4  9 16 25 36 49 64 81]
# [1.         1.41421356 1.73205081 2.         2.23606798 2.44948974 2.64575131 2.82842712 3.        ]

 

✔️ 지수

지수 함수는 np.exp(), np.exp2(), np.expm1() 등 다양하게 존재하며 산술 연산에서 이용했던 np.power()를 쓸 수도 있다.

  • np.exp() : exponential 값을 구한다. 즉, e^n 값이다.
  • np.exp2() : 2^n 값을 구한다.
  • np.expm1() : exponential 값을 구한뒤 1을 뺀다. 즉, e^n-1이다.

 

a1 = np.random.randint(1, 10, size=5)
print(a1)
print(np.exp(a1))
print(np.exp2(a1))
print(np.expm1(a1))

# output
# [2 5 1 3 9]
# [7.38905610e+00 1.48413159e+02 2.71828183e+00 2.00855369e+01
#  8.10308393e+03]
# [  4.  32.   2.   8. 512.]
# [6.38905610e+00 1.47413159e+02 1.71828183e+00 1.90855369e+01
#  8.10208393e+03]

 

✔️ 로그

로그 함수는 np.log(), np.log2(), np.log10() 등이 존재한다.

  • np.log() : 자연 로그(nutural logarithm)값을 반환한다.
  • np.log2() : 밑이 2인 로그 값을 반환한다.
  • np.log10(): 밑이 10인 로그 값을 반환한다.

 

print(a1)
print(np.log(a1))
print(np.log2(a1))
print(np.log10(a1))

# output
# [2 5 1 3 9]
# [0.69314718 1.60943791 0.         1.09861229 2.19722458]
# [1.         2.32192809 0.         1.5849625  3.169925  ]
# [0.30103    0.69897    0.         0.47712125 0.95424251]

 

✔️ 삼각함수

삼각함수 관련 함수는 다양하게 존재한다.

 

함수 설명
np.sin() 요소 별 사인
np.cos() 요소 별 코사인
np.tan() 요소 별 탄젠트
np.arcsin() 요소 별 아크 사인
np.sinh() 요소 별 하이퍼볼릭 사인
np.arcsinh() 요소 별 하이퍼볼릭 아크 사인
np.deg2rad() 요소 별 각도에서 라디안 변환
np.rad2deg() 요소 별 라디안에서 각도 변환
np.hypot() 요소 별 유클리드 거리 계산

 

 

🔍 참조

broadcasting https://numpy.org/doc/stable/user/basics.broadcasting.html

numpy.exp https://codetorial.net/numpy/functions/numpy_exp.html

 

 

 

 

 

'Python > NumPy' 카테고리의 다른 글

[NumPy] 배열 변환 - (2)  (0) 2022.02.02
[NumPy] 배열 변환 - (1)  (0) 2022.01.24
[NumPy] 배열 값 삽입/수정/삭제/복사  (0) 2022.01.24
[NumPy] 인덱싱과 슬라이싱  (0) 2022.01.23
[NumPy] 배열 생성 - (2)  (0) 2022.01.23

댓글