맞는데 왜 틀릴까..?

Language Syntax

Numpy

안도일 2022. 1. 19. 18:33

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