갈루아의 반서재

Array mathematics


기본적인 수학 연산이 가능합니다. 이 경우 원소 대 원소로 적용이 됩니다. 즉, 더하기, 빼기 등의 연산은 기본적으로 같이 사이즈여야 한다는 것이죠.

>>> a = np.array([1,2,3], float)

>>> b = np.array([5,2,6], float)

>>> a + b

array([6., 4., 9.])

>>> a – b

array([-4., 0., -3.])

>>> a * b

array([5., 4., 18.])

>>> b / a

array([5., 1., 2.])

>>> a % b

array([1., 0., 3.])

>>> b**a

array([5., 4., 216.])



2차원 array 에서 곱하기 연산은  행렬곱을 따르는 것이 아니라 원소 단위로 이루어집니다.

>>> a = np.array([[1,2], [3,4]], float)

>>> b = np.array([[2,0], [1,3]], float)

>>> a * b

array([[2., 0.],

       [3., 12.]])


사이즈가 맞지 않으면 아래와 같이 에러(shape mismatch)가 발생합니다.

>>> a = np.array([1,2,3], float)

>>> b = np.array([4,5], float)

>>> a + b

Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: shape mismatch: objects cannot be broadcast to a single shape



하지만 dimension 이 일치하지 않는 경우에는 수학적 연산을 수행하기 위해 브로드캐스팅하게 된다.

아래의 예에서 보듯이 상대적으로 작은 array b 가 array a 와 사이즈를 맞추기 위해 브로드캐스팅된다.

b 는 a 의 각각의 아이템만큼 반복된다.

파이썬은 이런 식으로 브로드캐스팅한다.

마치 array b 가 array([[-1., 3.],

                      [-1., 3.],

                      [-1., 3.]]) 인 것처럼 말이다.

>>> a = np.array([[1, 2], [3, 4], [5, 6]], float)
>>> b = np.array([-1, 3], float)
>>> a
array([[ 1.,  2.],
       [ 3.,  4.],
       [ 5.,  6.]])
>>> b
array([-1.,  3.])
>>> a+b
array([[ 0.,  5.],
       [ 2.,  7.],
       [ 4.,  9.]])


newaxis 상수를 이용하여 브로드캐스팅 대상을 특정할 수 있다.


> import numpy as np
>>> a=np.zeros((2,2), float)
>>> b=np.array([-1.,3.],float)
>>> a
array([[ 0.,  0.],
       [ 0.,  0.]])
>>> b
array([-1.,  3.])
>>> a+b
array([[-1.,  3.],
       [-1.,  3.]])
>>> b[np.newaxis,:]
array([[-1.,  3.]])
>>> b[:,np.newaxis]
array([[-1.],
       [ 3.]])

>>> a+b[np.newaxis,:]
array([[-1.,  3.],
       [-1.,  3.]])
>>> a+b[:,np.newaxis]
array([[-1., -1.],
       [ 3.,  3.]])
 


 


 

이상의 표준 연산자 외에도 NumPy 는 아래와 같은 다양한 함수를 제공한다.

abs, sign, sqrt, log, log10, exp, sin, cos, tan, arcsin, arccos, arctan, sinh, cosh, tanh, arcsinh, arccosh, and arctanh.

>>> a = np.array([1, 4, 9], float)

>>> np.sqrt(a)

array([ 1., 2., 3.])


>>> a = np.array([1.1, 1.5, 1.9], float)

>>> np.floor(a)  // 내림

array([ 1., 1., 1.])

>>> np.ceil(a) // 올림

array([ 2., 2., 2.])

>>> np.rint(a) // 반올림

array([ 1., 2., 2.])



pi/ e

파이값과 오일러 상수

>>> np.pi

3.1415926535897931

>>> np.e

2.7182818284590451


 

 

 

 

'프로그래밍 Programming' 카테고리의 다른 글

numpy - Arrays (4) (Array iteration)  (0) 2015.03.08
python print x IndentationError  (0) 2015.03.08
numpy - Arrays (3) (Array를 만드는 다른 방법들)  (0) 2015.02.28
numpy - Arrays (2)  (0) 2015.02.26
numpy - Arrays (1)  (0) 2015.02.26