Python Numpy 모듈

2023. 5. 29. 18:03파이썬

1. 넘파이(Numpy)

- 수학 과학 계산용 package
- 파이썬 list보다 속도가 빠름 
- ndarray를 사용한다 !
- 적은 메모리 사용

ndarray 과 list 차이

 

Python 리스트

  • 여러가지 타입의 원소
  • linked List 구현
  • 메모리 용량이 크고 속도가 느림
  • 벡터화 연산 불가
  • NumPy ndarray
    • 동일 타입의 원소
    • contiguous memory layout
    • 메모리 최적화, 계산 속도 향상
    • 벡터화 연산 가능

 출처 : https://datascienceschool.net/view-notebook/416d733c3a734565b69fd0c8dc959edb/ 

 

 

 

Tool : Google Colab

 

설치 방법 및 import 하기

! pip install numpy
import numpy as np

 

1차원 배열 만들기

ndarr1 =np.array([1,2,3,4])
print(ndarr1)
print(type(ndarr1)) #ndarray = n dimension array = n차원 배열

 

 

ndarray의 datatype

1가지 datatype만 저장이 가능

 

경우1. int + float  

결과: 전체 float

## 3.14가 있지만 저장은 가능 (why? 전체를 다 float 형으로 바꿔서 저장 |  기준: 가장 큰 데이터 타입)

ndarr2 = np.array([1,2,3.14,4])
ndarr2  ## result : array([1.  , 2.  , 3.14, 4.  ])

 

경우2. str + int + float + boolean

결과: 전체 str

# str을 넣을경우 : str으로 변경
ndarr4 = np.array(['1',2,3.14,True])
ndarr4

 

 

ndarray의 datatype 바꾸기

 

dtype=int 사용

# int로 바꾸기
ndarr3 = np.array([1,2,3.14,True],dtype=int)
ndarr3

예외

ndarr5 = np.array(['1','2','3.14','True'],dtype=int)
ndarr5

#  invalid literal for int() with base 10: '3.14'

str에서 int변환중 float이 있기 때문이다.

 

 

ndarray의 슬라이싱

 

.shape 메소드 사용

# 1차원 배열 
ndarr1 = np.array(['🟢','🔴','🟡','🍏','🍋'])
ndarr1.shape
# result: (5,) 5행 1열
 
 
# 2차원 배열
ndarr2d= np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
ndarr2d.shape
# result: (3,4) 3행 4열

 

1가지 행or 열 가져오기

 

# 한행을 가져오기
print(ndarr2d[0])
print(ndarr2d[0,])
print(ndarr2d[0,:])

#0열 가져오기
print(ndarr2d[:,0])

 

 

Fancy 인덱싱

범위가 아닌 특정 index의 집합의 값들을 선택해서 추출하고 싶을 때 사용 

 

ndarr1= np.array([10,15,2,8,20,90,85,44,23,32])
idx = [2,5,9]

ndarr1[idx] # index 2번,5번,9번을 뽑아준다.

 

Boolean 인덱싱

조건에 대한 필터링을 통해 색인을 위해 사용

주의점: index 개수 맞아야한다.

 

ndarr1 = np.array(['🟢','🔴','🟡','🍏','🍋'])
selValue = [True,False,True,False,True]

ndarr1[selValue]


 

ERROR

 

ndarr1 = np.array(['🟢','🔴','🟡','🍏','🍋'])
selValue = [True,False,True]

ndarr1[selValue]

 


 

2차원 Boolean 인덱싱

 

# 2차원 Boolean 인덱싱

ndarr2d= np.array([[1,2,3,4],
                  [5,6,7,8],
                  [9,10,11,12]])
 
ndarr2d > 7

boolean 결과값을 그대로 조건에 적용

 

ndarr2d[ndarr2d>7]  

 

 

arange(x,y)

순차적인 값을 생성할 때 사용(range(x,y)) 같은 기능

 

 

arr2 =np.arange(1,11)
arr2

 

 

sort() -오름차순 정렬 (내림차순 없다)

 

 

728x90