Python/NumPy

[NumPy] 배열 연산 - (1)

_sweep 2022. 2. 5. 18:45

이수안컴퓨터연구소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