update numpy int , float , sum
http://pythonstudy.xyz/python/article/402-numpy-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
pip install numpy
numpy 는 과학 계산을 위한 라이브러리 로서 다차원 배열을 처리하는데 필요한 여러 유용한 기능을 제공하고 있다
numpy 는 C언어로 구현되어있으며 , 다차원 처리와 백터 및 행렬 연산에 편리한 기능을 제공합니다.
numpy 에서 배열은 동일한 타입의 값들을 가진다.
기본적으로
import numpy as np
mylist = [1,2,3,4]
print(np.array(mylist)) # [1 2 3 4]
출력이 된다.
리스트랑 똑같은데 ??
type 을 찍어보게 되면 ,
import numpy as np
mylist = [1,2,3,4]
print(np.array(mylist))
print(type(mylist)) # <class 'list'>
print(type(np.arange(0,10))) # <class 'numpy.ndarray'>
타입은 다르게 나온다.
행렬이 몇행 몇열 육안으로 보면 되겠지만 , 출력을 할수가 있다.
In [17]: list2 = np.array([[1,2,3], [4,5,6] ,[7,8,9]])
In [18]: list2
Out[18]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) # 차원
In [19]: list2.shape
Out[19]: (3, 3)
array_int = np.array([1, 2, 3])
array_float = array_int.astype('float64') # 실수형으로 변환
print(array_float, array_float.dtype) # [1. 2. 3.] float64
array_int1= array_float.astype('int32') # 실수형을 다시 정수형으로 변환
print(array_int1, array_int1.dtype) # [1 2 3] int32
array_float1 = np.array([1.1, 2.1, 3.1])
array_int2= array_float1.astype('int32')
print(array_int2, array_int2.dtype) # [1 2 3] int32
array2 = np.array([[1,2,3],
[2,3,4]])
print(array2.sum()) # 전체를 더해서 15
print(array2.sum(axis=0)) # 열끼리 더해서 [1+2 , 2+3 , 3+4] => [3 5 7]
print(array2.sum(axis=1)) # 행끼리 더해서 [1+2+3 , 2+3+4] => [6 9]
기존에 있는 행렬을 다시 재정렬 할수가 있다.
하지만 무작정 바꿀수는 없고 ,
만약에
In [24]: b
Out[24]:
array([[1, 2, 3],
[4, 5, 6]])
라고한다면 ,
reshape 를 이용해서
In [26]: b.reshape(3,2)
Out[26]:
array([[1, 2],
[3, 4],
[5, 6]])
로 바꿀 수 있다.
배열생성
기본적으로 python 에서 반복문을 구현하고자 할때 ,
for i in range(0 , 10)
print(i)
이렇게 출력하는데 , numpy 를 이용하게 되면 ,
import numpy as np
In [8]: a = np.arange(0,10)
In [9]: a
Out[9]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [10]: a = np.arange(0,10,2)
In [11]: a
Out[11]: array([0, 2, 4, 6, 8])
ex) 행이 2이고 열이 3인 2차원 배열
rank : 2
shape : (2,3)
import numpy as np
list1 = [1,2,3,4]
a = np.array(list1)
print(a.shape) # (4 ,)
np.linspace 는 균일하게 나누고자 할때 사용하는 함수이다.
In [41]: import numpy as np
In [42]: a = np.arange(1,2,0.1) # 1 부터 2까지 0.1 로 쪼갬
In [43]: a
Out[43]: array([1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])
In [44]: b = np.linspace(1,2,11) # 1 부터 2까지 개수 11개
In [45]: b
Out[45]: array([1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ])
numpy의 linspace() 함수는 특정 구간을 쪼개어 값을 생성한다는 점에서 arange() 함수와 비슷합니다. 하지만 arange() 함수에서는 간격을 지정하고 linspace()함수에서는 구간의 개수를 지정한다는 점에서 차이가 있습니다.
In [49]: arr = np.random.randint(0,100,10)
In [50]: arr
Out[50]: array([49, 83, 8, 29, 59, 34, 44, 72, 19, 10])
In [51]: arr.max()
Out[51]: 83
In [52]: arr.min()
Out[52]: 8
In [53]: arr.argmax()
Out[53]: 1
In [54]: arr.argmin()
Out[54]: 2
In [56]: mat = np.arange(0,100).reshape(10,10)
In [57]: mat
Out[57]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
In [58]: mat[5,2]
Out[58]: 52
In [59]: mat[:,2]
Out[59]: array([ 2, 12, 22, 32, 42, 52, 62, 72, 82, 92])
In [60]: mat[2,:]
Out[60]: array([20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
In [61]: mat[mat>50]
Out[61]:
array([51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
In [62]: mat > 50
Out[62]:
array([[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, True, True, True, True, True, True, True, True,
True],
[ True, True, True, True, True, True, True, True, True,
True],
[ True, True, True, True, True, True, True, True, True,
True],
[ True, True, True, True, True, True, True, True, True,
True],
[ True, True, True, True, True, True, True, True, True,
True]])