수학, 축 방향

1. 넘파이 연산

넘파이는 element-wise연산하는 vectorization을 지원하기 때문에 루프 없이 계산할 수 있어 리스트보다 코드도 간결하고 실행 속도 또한 빠릅니다.

>>> A = np.array([1, 2, 3])
>>> B = np.array([3, 3, 3])

>>> C = A+B  
>>> C
array([0, 0, 0])  

>>> C = A*3
>>> C
array([3, 6, 9])
#행렬 곱
np.matmul()	

# 점 곱
np.dot()

# 텐서 곱
np.cross()

# 내적
np.inner()

# 외적
np.outer()

# 전치
np.transpose()
np.sum()

np.cumsum()

np.prod()

np.cumprod()
np.abs( array )	요소별 절댓값
np.round( array )	요소별 반올림
np.ceil( array )	요소별 올림
np.floor( array )	요소별 내림
np.trunc( array )	요소별 절사
np.maximum( array1, array2 )	요소별 최댓값
np.minimum( array1, array2 )	요소별 최솟값
np.max( array )	배열의 최댓값
np.min( array )	배열의 최솟값
np.argmax( array )	배열의 최댓값의 색인
np.argmin( array )	배열의 최솟값의 색안

np.add( array1, array2 )	요소별 덧셈
np.subtract( array1, array2 )	요소별 뺄셈
np.multiply( array1, array2 )	요소별 곱셈
np.divide( array1, array2 )	요소별 나눗셈
np.power( array1, array2 )	요소별 제곱
np.sqrt( array )	요소별 제곱근
np.mod( array1, array2 )	요소별 나눗셈의 나머지

np.sin( array )	요소별 사인
np.cos( array )	요소별 코사인
np.tan( array )	요소별 탄젠트
np.arcsin( array )	요소별 아크 사인
np.arccos( array )	요소별 아크 코사인
np.arctan( array )	요소별 아크 탄젠트
np.sinh( array )	요소별 하이퍼볼릭 사인
np.cosh( array )	요소별 하이퍼볼릭 코사인
np.tanh( array )	요소별 하이퍼볼릭 탄젠트

np.greater( array1, array2 )	요소별 array1 > array2 연산
np.greater_equal( array1, array2 )	요소별 array1 >= array2 연산
np.less( array1, array2 )	요소별 array1 < array2 연산
np.less_equal( array1, array2 )	요소별 array1 <= array2 연산
np.equal( array1, array2 )	요소별 array1 == array2 연산
np.not_equal( array1, array2 )	요소별 array1 != array2 연산

np.logical_and( array1, array2 )	요소별 Boolean 자료형 논리 AND 연산
np.logical_or( array1, array2 )	요소별 Boolean 자료형 논리 OR 연산
np.logical_xor( array1, array2 )	요소별 Boolean 자료형 논리 XOR 연산
np.logical_not( array )	요소별 Boolean 자료형 논리 NOT 연산

2. 배열의 통계적 특성

>>> arr = np.array([1, 2, 3, 4, 5, 6]) 

>>> arr.min()
1

>>> arr.max()
6

>>> arr.mean()
3.5

>>> arr.sum()
21

3. 계산할 차원 방향 지정하기

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

>>> arr.sum(axis=0)
array([4, 6])

>>> arr.sum(axis=0).shape
(2, )

>>> arr.sum(axis=1)
array([3, 7])

>>> arr.sum(axis=1).shape
(2, )

4. 배열의 축

1) 축을 기준으로 연산한 배열의 shape

축(axis) shape
기존 (2,2,4)
axis 0 (2, 4)
axis 1 (2,4)
axis 2 (2,2)
>>> arr = np.array([[[1, 2, 3, 4],[5, 6, 7, 8]],[[1, 2, 3, 4],[5, 6, 7, 8]]])

>>> arr.sum(axis=0)
array([[ 2,  4,  6,  8],
       [10, 12, 14, 16]])

>>> arr.sum(axis=1)
array([[ 6,  8, 10, 12],
       [ 6,  8, 10, 12]])
>>> arr.sum(axis=2)
array([[10, 26],
       [10, 26]])

2) 축 추가

>>> arr = np.array([1, 2, 3, 4])
>>>arr.shape
(4, )

>>> arr_2 = arr[np.newaxis]
>>> arr_2.shape
(1, 4)

>>> arr_3 = arr[:, np.newaxis]
>>> arr_3
(4, 1)

3) 차원 확장 및 축소

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

>>> a.shape
(3, )

>>> b = np.expand_dims(a, axis=0)
>>> b
array([[1, 2, 3]])

>>> b.shape
(1, 3)

>>> c= np.expand_dims(a, axis=1)
>>> c
array([[1], [2], [3]])

>>> c.shape
(3, 1)
>>> b_prime = np.squeeze(b)
>>> b_prime
array([1, 2, 3])

>>> b_prime.shape
(3, )

4) 1차원 배열 사용시 주의점

1차원 배열의 shape속성을 출력해보면, 튜플의 두 번째 원소 자리가 공백으로 남겨진 채 출력됩니다. 행벡터라면(1,x), 열벡터라면(x,1)의 shape을 가져야 할 것 같지만, 넘파이에서는 1차원 배열의 경우 행벡터와 열벡터 구분 없이 사용됩니다.

shape을 (1,4) 또는 (4,1)로 하고 싶다면,

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

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

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

5. 정렬

# 원래 행렬은 그대로 두고, 정렬된 행렬 리턴 
np.sort() 

# 내림차순 정렬
np.sort()[::-1]

# 원래 행렬을 정렬 
ndarray.sort()
# 2차원 배열의 axis를 이용한 sort()

A = np.array([[8, 12], [7, 1]])

np.sort(A, axis = 0)
-----------------------------
array([[7, 1], [8, 12]])
# 정렬된 행렬의 바뀐 인덱스를 리턴
np.argsort()

A = np.array([3, 1, 9, 5])

np.argsort(A)
----------------------------
array([1, 0, 3, 2])

Tags:

Categories:

Updated: