Numpy
파이썬의 리스트는 매우 느리기 때문에 c로 구현된 numpy를 사용함
numpy의 리스트는 요소의 type이 모두 같아야함
import numpy as np
-------------------------------------------------------------------------------
a = np.zeros(5)
--> [0,0,0,0,0]
a = np.array( [1,2,3,4,5] )
--> [1,2,3,4,5]
a = np.array( [1,2,3] , [4,5,6] ) #2차원 배열
a = np.zeros( (3,2) ) #3행 2열 짜리 배열
--> [0,0],[0,0],[0,0]
--------------------------------------------------------------------------------
파일 읽어오고 저장하기
np.savetxt('a.txt', a, delemiter=',' , fmt='%d') #a배열을 파일로 저장
b = np.loadtxt('a.txt', delimiter=',' , dtype = np.int) #파일을 읽어오기
a = np.eye(5)
--> 10000
01000
00100
00010
00001
a = np.eye(5, k= 2)
--> 00100
00010
00001
00000
00000
----------------------------------------------------------------------------
a = np.ones( (2,3) )
--> [1,1,1],[1,1,1]
a * 5
--> [5,5,5],[5,5,5]
a = np.full( (2,3), 123 )
--> [123,123,123],[123,123,123]
a = np.empty( (2,3) )
--> 리스트에 쓰레기 값이 들어가있음
a = np.full( (2,3), 7)
b = np.ones_like(a)
--> [1,1,1],[1,1,1]
a*b
--> [7,7,7],[7,7,7]
--------------------------------------------------------------------------------------------
a = np.linspace( 0, 100, 9 ) #0부터 100까지를 9개로 나눔
--> [0, 12.5 , 25, 37.5, 50, 62.5, 75, 87.5, 100]
a = np.linspace( 0, 100, 9 , endpoint = False) #100을 포함하지 않는 숫자에서 나눔
-------------------------------------------------------------------------------------------------
numpy는 기본적으로 64비트 float형으로 지정되어 있음
a = np.ones(5, dtype = np.int8) #8비트 int형으로 바꿈
---------------------------------------------------------------------------------------------------
a = np.ones( (3,4) )
a.dim #a의 차원 확인하기
-->2
a.shape #a의 행,열 확인하기
-->(3,4)
a.size #a의 원소의 개수
--> 12
-----------------------------------------------------------------------------------------------------
a = np.arange(5,10)
-->[5,6,7,8,9]
a = np.arange(5, 10, 0.1)
--> 5부터 10 까지 0.1씩 증가하는 리스트
파이썬 기본 list를 numpy리스트로 깊게 복사하기 (a와 b는 같은 객체가 아님)
a = [ [1,2,3], [4,5,6] ]
b = np.array(a)
--> [ [1,2,3], [4,5,6] ]
numpy 리스트에서는 아래와 같은 표현도 가능함
b[0,1]
--> 2
b[0][1]
--> 2
---------------------------------------------------------
불리언 인덱싱
a = np.array(2)
--> [0,1]
a[ [True,False] ] a[ [True, True] ]
--> a=[0] -> a= [0,1]
a = np.array( [1,2,3,4,5] )
a[a >3]
--> [4,5]
a[ a%2 ==1]
-->[1,3,5]
----------------------------------------------------------
a = np.array([1,2,3,4])
b = a.reshape( (2,2) ) #a의 값을 2행2열로 바꿔라 얕은복사가 됨
--> [1,2],[3,4]
b = a.reshape( (2,-1) ) #2행으로 맞추고 열은 행에 맞게 만들어라
-----------------------------------------------------------
Fancy Indexing
팬시 인덱싱
a = [0,1,2],[3,4,5],[6,7,8]
a[ [0,2] ] #a의 0,2번 행만 선택해서 가져온다
-->[0,1,2],[6,7,8]
a[ [0,2], [1,2] ] #0번 행의 1번 열, 2번 행의 2번열
-->[1,8]
------------------------------------------------------------
numpy는 벡터 연산을 함 (Vectorize Operation)
a = [1,2],[3,4]
b = [5,6],[7,8]
a+b
-->[6,8],[10,12]
-------------------------------------------------------------
Broadcasting
numpy는 벡터 연산이기 때문에
스칼라 값인 10을 벡터 [10,10,10,10,10]으로 변환하여 a+10을 연산하는것임
행이 같으면 연산이 가능하지만 열이 다르다면 연산을 할 수 없음
a = np.arange(5)
a + 10
--> [10,11,12,13,14]
a = np.arange(6).reshape(3,-1)
-->[0,1],[2,3],[4,5]
b = np.array( [20,30] )
a + b #[20,30]을 [20,30],[20,30],[20,30]으로 변환하여 연산함
-->[20,31],[22,33],[24,35]
----------------------------------------------------------------------------------
a = [0,1,2],[3,4,5],[6,7,8]
np.sum(a, axis=0) #세로 행의 합을 구함
--> [9,12,15]
np.sum(a, axis=1) #가로 열의 합을 구함
--> [3,12,21]
np.max(a, axis=0)
--> [6,7,8]
----------------------------------------------------------------------------------
Universial Function
ndarray 데이터에 원소별로 연산을 수행하는 함수들
a = [0,1],[2,3]
b = np.add(a, 100)
--> [100,101],[102,103]
np.argmax(a) #최댓값이 있는 인덱스
-->4
np.argmin(a) #최솟값이 있는 인덱스
-->0
a = np.arange(30)
a.resize( (2,3) ) #a의 사이즈 변경
--> [0,1,2],[3,4,5]
'Language Syntax' 카테고리의 다른 글
CSS (0) | 2022.01.19 |
---|---|
Html (0) | 2022.01.19 |
파이썬 (Python) (0) | 2022.01.19 |