2019. 4. 4. 14:35ㆍProgramming Tutorial/Python
필자는 Tutorial이라는 영어표현을 굉장히 즐겨쓰고 검색엔진에서 활용하는 편이다.
(짧은 말끝 포스팅 첫시도..)
역시 오늘도 base를 쌓기 위해서 검색엔진을 활용해서 파이썬 사용시 핵심 라이브러리 중 하나인 numpy의 기초를
포스팅을 해보고자 한다.
1. numpy라는게 대체 머길래..
- 파이썬의 라이브러리 이다.
- 파이썬에 LIST라는 자료형도 있으나 for문을 사용해야하는 등 효율적인 행렬 data 연산이 불가함.
- numpy는 가능하다. Matlab 느낌이라고 보면 되겠다.
2. 그 좋다는 numpy 한번 수입?? 해보자
In [1]: import numpy
In [2]: import numpy as np
첫번째 줄과 같이 직접 call하게 되면 우리는 numpy라는 full name을 사용할때마다 때려 넣어줘야 한다..
numpy.array([1, 2, 3])
하지만 두번째 줄과 같이 "as np" 라는 표현을 추가하게 되면 굳이 numpy라고 5번 타자를 때릴 필요가 없이
np라는 글자까지만 때리면 되서 좀 편하다.
np.array([1, 2, 3])
두번째 줄로 해서 타이핑 양을 직접적으로 줄이는 것이 일반적이라고 할수 있다.
3. 앞에서 언급한 numpy와 list 비교로 요놈을 왜 쓰는지 봅시다.
- 사실 data를 저장하고 인덱스하고 반복하는 부분에서 numpy와 list 두녀석은 비슷하다.
- 그러나 list 보다 numpy가 적은 메모리를 쓰고 빠르고 편하다. (왜냐고?? 뒤에 예시로 보자)
- 그리고 중요한게 list로는 직접 계산을 못한다. (list로 덧셈하면 list가 연장 될 뿐). numpy는 가능.
예시를 하나 까봅시다.
1) 첫번째 예시... 곱셈 : list는 에러가 뜬다..
In [3]: python_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
In [4]: print((python_list) * 2)
Out[4]: TypeError: unsupported operand type for *:'list' and 'int'
In [5]: numpy_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
In [6]: print((numpy_array) * 2)
Out[6]: [2 4 6 8 10 12 14 16 18]
2) 두번째 예시.. 덧셈 : list는 반복연장되서 사이즈만 키울뿐 연산되진 않는다..
In [7]: print(python_list + python_list)
Out[7]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [8]: print(numpy_array + numpy_array)
Out[8]: [2 4 6 8 10 12 14 16 18]
결국은 matlab화 시키기 위한 스팀게임 대박 DLC같은 녀석인셈.. 수입안하고는 머 해볼수가 없는 녀석이다.
4. numpy로 할수 있는 기초적인 것들?
예시를 포함하면 더 이해하기 쉽고 기억에도 남을 것 같다.
아주 직관적인 표현들이라 글로 서술은 최대한 줄이겠다.
a) 코딩을 때리다가 아.. 이 변수에 값이 몇개나 들어있지?. 기억이 안날때.
- size
In [9]: numpy_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
In [10]: print(numpy_array.size)
Out[10]: 9
b) 행렬 변수를 처리하는데 요놈이 몇 x 몇 인지 알수가 없을 때.
- shape
In [11]: numpy_matrix = np.array([(1, 2, 3, 4), (5, 6, 7, 8)])
In [12]: print(numpy_matrix.shape)
Out[12]: (2, 4)
c) 행렬 모양을 좀 바꿔서 처리하고 싶을때.
- reshape..
In [13]: numpy_matrix = np.array([(1, 2, 3, 4), (5, 6, 7, 8)])
In [14]: numpy_matrix = numpy_matrix.reshape(4, 2)
In [15]: print(numpy_matrix)
Out[15]: [[1, 2]
[3, 4]
[5, 6]
[7, 8]]
d) numpy array내 지정된 위치의 값을 추출 하고 싶을때? 이런건 전문용어로 index를 이용해야겠다.
-변수명[rows,columns] 로 하면 되고 python은 이런경우 시작이 0부터라는거는 잊지말자..
In [16]: numpy_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
In [17]: print(numpy_array[0, 2])
Out[17]: 3
- 한개의 값 말고 여러 값을 추출 하고 싶을때는 .. 아래 표현과 같이 하면 된다.
In [18]: numpy_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
In [19]: print(numpy_array[0, 0:4])
Out[19]: [1 2 3 4]
기본이다.. MATLAB과도 유사하고..
e) 그 외 통계적인 보조 표현
max, min, mean, median, var, std (최대,최소,평균,미디안, 분산,표준편차)
In [22]: numpy_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
In [23]: print(numpy_array.max())
Out[23]: 9
In [24]: print(numpy_array.min())
Out[24]: 1
In [25]: print(numpy_array.sum())
Out[25]: 45
In [26]: numpy_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
In [27]: print(numpy_array.mean())
Out[27]: 5
In [28]: print(numpy_array.median())
Out[28]: 5
In [29]: print(numpy_array.var())
Out[29]: 6.666666666666667
In [30]: print(numpy_array.std())
Out[30]: 2.581988897471611
f) 이러한 연산들은 axis 에 한정하여 진행할수도 있다.
- axis =0 : y축으로 연산
- axis =1 : x축으로 연산
- axis = None : 모든 값을 다 연산.
In [31]: print(numpy_matrix)
Out[31]: [[1, 2]
[3, 4]
[5, 6]
[7, 8]]
In [32]: print(numpy_matrix.sum(axis = 0))
Out[32]: [16 20]
In [33]: print(numpy_matrix.sum(axis = 1))
Out[33]: [3 7 11 15]
In [34]: print(numpy_matrix.sum(axis = None))
Out[34]: 36
g) 여러 array들을 연결하는 것도 가능하다.
- concatenate
In [35]: array_1 = np.array([1,2,3])
In [36]: array_2 = np.array([4,5,6])
In [37]: array_3 = np.array([7,8,9])
In [38]: print(np.concatenate((array_1, array_2, array_3)))
Out[38]: [1 2 3 4 5 6 7 8 9]
In [39]: array_4 = np.array([[1,2,3],[0,0,0]])
In [40]: array_5 = np.array([[0,0,0],[7,8,9]])
In [41]: print(np.concatenate((array_1, array_2), axis = 1))
Out[41]: [[1 2 3 0 0 0]
[0 0 0 7 8 9]]
h) 0이나 1로만 되어있는 array를 만드는 표현이다. matlab과 아주 유사한 느낌을 지울수 없다.
무료니까 착한 matlab이라고 해야하나..
- zeros , ones
In [42]: print(np.zeros((1,2)))
Out[42]: [[ 0. 0.]]
In [43]: print(np.zeros((1,2), dtype = np.int))
Out[43]: [[0 0]]
In [44]: print(np.ones((1,2)))
Out[44]: [[ 1. 1.]]
In [45]: print(np.ones((1,2), dtype = np.int))
Out[45]: [[1 1]]
i) 단위행렬을 만들고 싶다면??
- identity
- parameter인 k=1로 표현해서 위쪽으로 이동 표현도 가능하다.. 말로 어찌표현해야될지.. 아래 예제를 보자..
In [46]: print(np.identity(3))
Out[46]: [[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
In [47]: print(np.eye(8, 7, k = 1))
Out[47]: [[ 0. 1. 0. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 1. 0. 0.]
[ 0. 0. 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 1.]
[ 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0.]]
j) 행렬문제로 좀 더 들어가보면 행렬곱셈 연산이란 부분도 있다..
- 내적 dot , 외적 cross... vector에 대해서 공부해보셨다고 보고 추가 코멘트는 생략 하겠다.
In [48]: array_6 = np.array([ 1, 2 ])
In [49]: array_7 = np.array([ 3, 4 ])
In [50]: print(np.dot(array_6, array_7))
Out[50]: 11
In [51]: print(np.cross(array_6, array_7))
Out[51]: -2
'Programming Tutorial > Python' 카테고리의 다른 글
[numpy #5] 열벡터를 만들어 봅시다. Making column vector (0) | 2019.06.05 |
---|---|
[파이썬] string 자료형의 Punctuation 없애는 방법 (0) | 2019.05.15 |
[numpy #3] Broad casting에 대해서 알아보자 (0) | 2019.04.17 |
[pandas#1] Data는 정리하고 청소하는 것부터... (0) | 2019.04.05 |
[numpy #1] "numpy.newaxis"는 무엇이고 언제사용하는가 (4) | 2019.04.02 |