- NumPy - 수학/과학 연산을 위한 파이썬 패키지
- NumPy 기초
- NumPy 어레이 만들기
- NumPy 어레이 출력하기
- NumPy 기본 연산
- NumPy 범용 함수 (ufunc)
- NumPy 인덱싱/슬라이싱/이터레이팅
- NumPy 어레이 형태 다루기
- NumPy 난수 생성 (Random 모듈)
- NumPy 다양한 함수들
- numpy.absolute
- numpy.add
- numpy.allclose
- numpy.amax
- numpy.amin
- numpy.append
- numpy.arange
- numpy.arccos
- numpy.arccosh
- numpy.arcsin
- numpy.arcsinh
- numpy.arctan
- numpy.arctanh
- numpy.argmax
- numpy.argsort
- numpy.around
- numpy.array_equal
- numpy.array_split
- numpy.array
- numpy.cbrt
- numpy.ceil
- numpy.clip
- numpy.concatenate
- numpy.copy
- numpy.cos
- numpy.cosh
- numpy.deg2rad
- numpy.delete
- numpy.digitize
- numpy.divide
- numpy.dot
- numpy.empty_like
- numpy.empty
- numpy.equal
- numpy.exp
- numpy.exp2
- numpy.expm1
- numpy.fabs
- numpy.fix
- numpy.floor_divide
- numpy.floor
- numpy.full_like
- numpy.full
- numpy.greater_equal
- numpy.greater
- numpy.identity
- numpy.insert
- numpy.isclose
- numpy.less_equal
- numpy.less
- numpy.linspace
- numpy.loadtxt
- numpy.log
- numpy.log1p
- numpy.log2
- numpy.log10
- numpy.matmul
- numpy.mean
- numpy.mod
- numpy.multiply
- numpy.ndarray.flatten
- numpy.ndarray.shape
- numpy.negative
- numpy.nonzero
- numpy.not_equal
- numpy.ones_like
- numpy.ones
- numpy.polyfit
- numpy.positive
- numpy.power
- numpy.rad2deg
- numpy.random.rand
- numpy.random.randint
- numpy.random.randn
- numpy.random.seed
- numpy.random.standard_normal
- numpy.reciprocal
- numpy.remainder
- numpy.repeat
- numpy.reshape
- numpy.rint
- numpy.round_
- numpy.savetxt
- numpy.set_printoptions
- numpy.sign
- numpy.sin
- numpy.sinh
- numpy.split
- numpy.sqrt
- numpy.square
- numpy.std
- numpy.subtract
- numpy.sum
- numpy.take
- numpy.tan
- numpy.tanh
- numpy.tile
- numpy.transpose
- numpy.tril
- numpy.triu
- numpy.true_divide
- numpy.trunc
- numpy.var
- numpy.where
- numpy.zeros_like
- numpy.zeros
- NumPy 상수
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
NumPy 기본 연산¶
NumPy 어레이의 다양한 연산 방식에 대해 소개합니다.
어레이의 산술 연산¶
어레이에 대한 산술 연산자는 요소 단위로 적용됩니다.
새로운 어레이가 생성되어서 결과가 채워집니다.
예제¶
import numpy as np
a = np.array([20,30,40,50])
b = np.arange(4)
c = a-b
print(c)
print(b**2)
print(10*np.sin(a))
print(a<35)
[20 29 38 47]
[0 1 4 9]
[ 9.12945251 -9.88031624 7.4511316 -2.62374854]
[ True True False False]
a-b
와 같이 어레이의 차는 각 요소의 차를 갖는 어레이를 만듭니다.
b**2
과 같은 지수 연산이나 np.sin(a)
도 마찬가지로 요소 단위로 적용됩니다.
a<35
와 같은 비교 연산자의 경우에는 True
, False
의 진리값을 갖는 어레이가 출력됩니다.
어레이의 곱 연산, 행렬곱 연산¶
다른 많은 행렬 언어와 다르게, NumPy 어레이에서 곱 (*) 연산은 요소 단위로 이루어집니다.
일반적인 행렬곱 (matrix product)은 (Python > 3.5 에서) @ 연산자를 이용해서 하거나,
dot()
함수를 이용해서 수행할 수 있습니다.
예제¶
import numpy as np
A = np.array([[1,1], [0,1]])
B = np.array([[2,0], [3,4]])
print(A * B) # elementwise product
print(A @ B) # matrix product
print(A.dot(B)) # another matrix product
[[2 0]
[0 4]]
[[5 4]
[3 4]]
[[5 4]
[3 4]]
어레이의 할당 연산¶
+=
, *=
와 같은 연산들은 새로운 어레이를 만들지 않고 이전의 어레이를 대체하도록 동작합니다.
예제¶
import numpy as np
a = np.ones((2,3), dtype=int)
b = np.random.random((2,3))
a *= 3
print(a)
b += a
print(b)
a += b # b is not automatically converted to integer type
[[3 3 3]
[3 3 3]]
[[3.22121453 3.50794962 3.0809372 ]
[3.60019017 3.16073469 3.27413715]]
Traceback (most recent call last):
File "main.py", line 12, in <module>
a += b # b is not automatically converted to integer type
numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
a += b
연산에서 어레이 b가 자동으로 정수 타입의 어레이로 변환될 수 없어서 에러가 발생합니다.
Upcasting¶
다양한 타입을 갖는 어레이들의 연산 결과로 만들어지는 어레이의 타입은
더 일반적인 또는 더 정밀한 타입으로 결정 (upcasting)됩니다.
예제¶
import numpy as np
from numpy import pi
a = np.ones(3, dtype=np.int32)
b = np.linspace(0,pi,3)
print(b.dtype.name)
c = a+b
print(c)
print(c.dtype.name)
d = np.exp(c*1j)
print(d)
print(d.dtype.name)
float64
[1. 2.57079633 4.14159265]
float64
[ 0.54030231+0.84147098j -0.84147098+0.54030231j -0.54030231-0.84147098j]
complex128
단항 연산 - sum(), min(), max()¶
어레이의 모든 요소의 합을 계산하는 등의 단항 연산들은 ndarray 클래스의 메서드로 구현됩니다.
예제¶
import numpy as np
a = np.random.random((2,3))
print(a)
print(a.sum())
print(a.min())
print(a.max())
[[0.45970995 0.69712418 0.56494716]
[0.200097 0.78456803 0.67355451]]
3.3800008264183745
0.20009699726571373
0.7845680273597524
특정 축에 대한 연산 적용¶
기본적으로 이러한 연산들은 shape에 관계없이 숫자의 리스트인 것처럼 어레이에 적용됩니다.
하지만 축 파라미터 (axis parameter)를 적용함으로써, 어레이의 특정 축에 대해 연산을 적용할 수 있습니다.
예제¶
import numpy as np
b = np.arange(12).reshape(3,4)
print(b)
print(b.sum(axis=0)) # sum of each column
print(b.min(axis=1)) # min of each row
print(b.cumsum(axis=1)) # cumulative sum along each row
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[12 15 18 21]
[0 4 8]
[[ 0 1 3 6]
[ 4 9 15 22]
[ 8 17 27 38]]
이전글/다음글
이전글 : NumPy 어레이 출력하기
다음글 : NumPy 범용 함수 (ufunc)