참고 자료
https://docs.scipy.org/doc/numpy/user/quickstart.html
파이썬 버전 3.7 기준
NumPy 버전 1.16 기준
본 포스팅에서 다루는 범위는 다음과 같다.
print 함수를 이용한 배열의 출력과 넘파이의 기본연산자(+, -, *, /), 행렬내적(@, dot), 단항연산자(sum, min, max, cumsum)를 다룬다.
배열(array)의 출력과 기본 연산자(basic operation)
배열의 출력
○ 배열을 출력할때에는 파이썬 리스트를 출력하는 것과 거의 유사하지만, 아래와 같은 법칙을 따른다.
▷ 마지막 축은 왼쪽에서 오른쪽으로 출력이 된다.
▷ 두번째부터 마지막까지는 가장 위에서 가장 아래까지 출력된다.
▷ 나머지는 위에서 아래로 출력되며, 각 슬라이스는 다음부터 빈줄로 구분된다.
○ 즉, 차원에 따라서 출력되는 모양은 아래와 같다.
▷ 1차원 배열은 열처럼 출력이 된다.
▷ 2차원(양차원)은 행렬(matrices)처럼 출력이된다.
▷ 3차원은 행렬의 배열처럼 출력이된다.
출력 예)
# 1차원 배열의 출력
In[4]: x = np.arange(10)
In[5]: print(x)
[0 1 2 3 4 5 6 7 8 9]
# 2차원 배열의 출력
In[6]: y = np.arange(10).reshape(2,5)
In[7]: print(y)
[[0 1 2 3 4]
[5 6 7 8 9]]
# 3차원 배열의 출력
In[8]: z = np.arange(20).reshape(2,2,5)
In[9]: print(z)
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]]
[[10 11 12 13 14]
[15 16 17 18 19]]]
○ 넘파이에서는 굉장히 큰 배열을 출력할 경우 자동으로 중간부분을 자동으로 스킵하여 출력한다.
▷ 즉, 처음부분과 끝부분만 출력해준다.
출력 예)
# 1차원 배열 출력의 생략
In[13]: x1 = np.arange(2500)
In[14]: print(x1)
[ 0 1 2 ... 2497 2498 2499]
# 2차원 배열 출력의 생략
In[15]: x2 = np.arange(2500).reshape(50,50)
In[16]: print(x2)
[[ 0 1 2 ... 47 48 49]
[ 50 51 52 ... 97 98 99]
[ 100 101 102 ... 147 148 149]
...
[2350 2351 2352 ... 2397 2398 2399]
[2400 2401 2402 ... 2447 2448 2449]
[2450 2451 2452 ... 2497 2498 2499]]
넘파이의 기본 연산자 및 메서드
기본 연산
○ 배열에 대해 산술연산을 수행할 때에는 같은 인덱스를 가지는 요소들끼리 산술연산이 적용된다.
▷ 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 제곱(**)와 같은 모든 기본연산자를 포함한다.
▷ 행렬의 내적과 관련된 내용은 아래에서 다룬다.
○ 파이썬에서 제공되는 "+=", "*=", "-=" 연산자도 마찬가지로 적용이 된다.
▷ 단, 자료형이 다를 경우 예외를 일으킬 수 있으므로 주의를 요한다.
○ 비교연산(<, >, ==)역시 가능하다.
○ 하위연산자와 상위연산자간에 연산을 수행할때 상위연산자의 자료형에 따른다.
출력 예)
# 예제 변수 입력
In[3]: x = np.array([10,20,30,40,50])
In[4]: y = np.array(np.arange(5)*5)
In[5]: y
Out[5]: array([ 0, 5, 10, 15, 20])
# 각 연산자의 결과
In[6]: x+y
Out[6]: array([10, 25, 40, 55, 70])
In[7]: x-y
Out[7]: array([10, 15, 20, 25, 30])
In[8]: y**2
Out[8]: array([ 0, 25, 100, 225, 400], dtype=int32)
In[9]: x*10
Out[9]: array([100, 200, 300, 400, 500])
In[10]: x > 23
Out[10]: array([False, False, True, True, True])
곱(*, @) 연산과 행렬 내적
○ 많은 행렬연산 언어와는 다르게, 곱셈(*) 연산자는 요소들끼리 산술연산이 적용된다.
○ 행렬의 내적(dot product)를 계산하는 연산자는 @ 연산자를 사용하거나, dot 함수나 메서드를 적용하면 된다.
※ @ 연산자는 파이썬 3.5 버전 이상부터 지원된다.
출력 예)
# 예제 변수 입력
In[22]: x = np.array([[1,2],[3,4]])
In[23]: y = np.array([[2,0],[2,2]])
# 각 연산 결과
In[24]: x*y
Out[24]:
array([[2, 0],
[6, 8]])
In[25]: x@y
Out[25]:
array([[ 6, 4],
[14, 8]])
In[26]: x.dot(y)
Out[26]:
array([[ 6, 4],
[14, 8]])
단항연산자(sum, min, max, cumsum)
○ sum과 같은 단항 연산자는 ndarray 클래스의 메서드로 사용되어 진다.
○ 기본적으로, 단항연산자는 형상과 상관없이 내부 배열을 하나의 리스트처럼 간주하며, 결과는 하나의 숫자로 반환이 된다.
▷ axis를 명시함으로서 각 축으로 나누어 연산하여, 결과를 명시하는 것도 가능하다.
출력 예)
# 예제 변수 입력
In[31]: x = np.arange(15).reshape(3,5)
In[32]: x
Out[32]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
# 단항연산자 적용 결과
In[33]: x.sum()
Out[33]: 105
In[34]: x.min()
Out[34]: 0
In[35]: x.max()
Out[35]: 14
In[36]: x.cumsum()
Out[36]:
array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78,
91, 105], dtype=int32)
# axis 변수 입력시 반환 결과
In[37]: x.sum(axis=0)
Out[37]: array([15, 18, 21, 24, 27])
In[38]: x.sum(axis=1)
Out[38]: array([10, 35, 60])
In[39]: x.cumsum(axis=0)
Out[39]:
array([[ 0, 1, 2, 3, 4],
[ 5, 7, 9, 11, 13],
[15, 18, 21, 24, 27]], dtype=int32)
In[40]: x.cumsum(axis=1)
Out[40]:
array([[ 0, 1, 3, 6, 10],
[ 5, 11, 18, 26, 35],
[10, 21, 33, 46, 60]], dtype=int32)
'Python > NumPy' 카테고리의 다른 글
넘파이의 기초 통계함수(평균,분산,표준편차,공분산) - Numpy(15) (0) | 2019.03.21 |
---|---|
배열(array)의 형상(shape) 정보 확인과 조작(reshape, resize) - NumPy(14) (0) | 2019.03.07 |
Record array(레코드 배열)에서의 Recarray Helper Functions - NumPy(12) (0) | 2019.02.26 |
Structured Array(구조체 배열)의 Record array(레코드 배열) - NumPy(11) (0) | 2019.02.25 |
Structured Array(구조체 배열)의 indexing(인덱싱)과 assignment(배정) - NumPy(10) (0) | 2019.02.24 |
댓글