728x90
반응형
SMALL
1. 넘파이(Numpy)
- 수학, 과학 계산용 패키지
- 성능 : 파이썬의 리스트보다 빠름
- 메모리 사이즈: 파이썬의 리스트보다 적은 메모리를 사용
- 빌트인 함수: 선형대수, 통계관련 여러 함수들을 내장
1-1. Numpy 설치하기
!pip install numpy
1-2. Numpy import하기
import numpy
import numpy as np # 별칭 사용
1-3. 설치 디렉토리 확인하기
- 설치되어있는 위치
- 코랩에서 깔았기 때문에 현재는 마음대로 지울 수 없지만 자기 컴퓨터에서 라이브러리, 모듈을 설치 후 삭제해야할 경우가 있기 때문에 디렉토리를 확인해야함
numpy
>>> <module 'numpy' from '/usr/local/lib/python3.10/dist-packages/numpy/__init__.py'>
2. ndarray(n dimension array)
- 다차원 배열
- ndarray는 생성될 때 크기가 결정
- 데이터를 메모리 내에서 연속적으로 저장하므로 빠른 계산이 가능
- 동일한 데이터 타입을 가지는 요소들로 구성되어야 함
- 다차원 배열에 대한 다양한 수학적 연산을 지원
2-1. list & ndarray의 비교
# 리스트
list1 = [1,2,3,4]
list2 = [[1,2,3,4], [5,6,7,8]]
print(list1)
print(list2)
print(type(list1)) # <class 'list'>
print(type(list1[1])) #<class 'int'>
print(type(list2)) # <class 'list'>
>>> [1, 2, 3, 4]
[[1, 2, 3, 4], [5, 6, 7, 8]]
<class 'list'>
<class 'int'>
<class 'list'>
# ndarray
ndarr1 = np.array([1,2,3,4])
print(ndarr1)
print(type(ndarr1)) #<class 'numpy.ndarray'>, n dimension array
>>> [1 2 3 4]
<class 'numpy.ndarray'>
2-2. list를 ndarray로 변환
ndarr1 = np.array(list1)
ndarr2 = np.array(list2)
print(ndarr1)
print(ndarr2) # 2차원
print(type(ndarr1))
print(type(ndarr2))
>>> [1 2 3 4]
[[1 2 3 4]
[5 6 7 8]]
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
2-3. ndarray의 데이터 타입
# list
list1 = [1, 3.14, 'Python', '😎', True] # 다양한 데이터타입을 리스트에 저장할 수 있음
print(list1)
lisst1[3]
>>> [1, 3.14, 'Python', '😎', True]
'😎'
# ndarray
ndarr1 = np.array([1, 2, 3, 4])
ndarr2 = np.array([1, 2, 3.14, 4])
print(ndarr1)
print(ndarr2) #자동 형변환(모든 요소가 float형으로 바뀜)
>>> array([1, 2, 3, 4])
array([1. , 2. , 3.14, 4. ])
ndarr3 = np.array([1, 2, 3.14, True])
print(ndarr3) # 가장 큰 데이터타입인 float형으로 모든 요소가 바뀜(Bool은 데이터타입이 가장 작음!!)
>>> array([1. , 2. , 3.14, 1. ])
ndarr4 = np.array(["1", 2, 3.14, True])
print(ndarr4) # str이 데이터타입이 가장 큼(모든 요소가 str형으로 바뀜)
# dtype='<U32': 데이터(요소들)의 타입, 데이터타입이 유니코드32 타입
>>> array(['1', '2', '3.14', 'True'], dtype='<U32')
ndarr5= np.array([1,2,3.14, True], dtype=int)
print(ndarr5) # dtype요소들 모두 int로 바뀜!, float형은 소수점뒤를 빼고 정수만 남음
>>> array([1, 2, 3, 1])
ndarr6 = np.array(['1',2,3.14, True], dtype=int)
print(ndarr6) # 따옴표를 떼고 숫자였을 때 int형으로 바꿀 수 있음!
>>> array([1, 2, 3, 1])
# invalid literal for int() with base 10: '3.14' -> 따옴표를 떼고 float형일 때 int로 변환할 수 없음!
ndarr7 = np.array(['1','2','3.14', 'True'], dtype=int)
3. ndarray 다루기
3-1. ndarray 인덱싱
1) 1차원 array
ndarr1 = np.array(['🥝', '🍋','🍈','🍊','🍉'])
print(ndarr1)
>>> array(['🥝', '🍋', '🍈', '🍊', '🍉'], dtype='<U1')
ndarr1.shape # (5,): 5행(5개의 데이터가 있음)
>>> (5,)
print(ndarr1[0])
print(ndarr1[4])
print(ndarr1[-1])
print(ndarr1[-2])
>>> 🥝
🍉
🍉
🍊
2) 2차원 array
ndarr2d = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12]])
ndarr2d.shape #(3, 4) : 3행 4열(2차원 배열
>>> (3, 4)
print(ndarr2d[0,2]) # 3: 0행 2열
print(ndarr2d[0][2]) # 3: 0행 2열
>>> 3
3
3-2. Fancy 인덱싱
- 범위가 아닌 특정 index의 집합의 값들을 선택해서 추출하고 싶을 때 활용
ndarr1 = np.array([10, 140, 2, 8, 20, 6, 99, 45, 26, 63])
idx = [2, 5, 8]
ndarr1[idx] #ndarr1[[2,5,8]]
>>> array([ 2, 6, 26])
ndarr2d = np.array([[1,3,6,7],
[5,6,7,8],
[9,4,0,1]])
ndarr2d[[0, 1], :] # 0과 1행, 모든 열
>>> array([[1, 3, 6, 7],
[5, 6, 7, 8]])
3-3. Boolean 인덱싱
- 조건에 대한 필터링을 통해 Boolean값을 이용한 색인을 사용하는 방법
1) 1차원 array
ndarr1 = np.array(['🥝', '🍋','🍈','🍊','🍉'])
selValue=[True, False, True, True, False]
ndarr1[selValue]
>>> array(['🥝', '🍈', '🍊'], dtype='<U1')
selValue2 = [True, False]
# ndarr1[selValue2] # IndexError: Boolean Value는 array 요소의 개수와 꼭 같아야함!!
2) 2차원 array
ndarr2d = np.array([[1,3,6,7],
[5,6,7,8],
[9,4,0,1]])
ndarr2d > 7 # 데이터가 boolean화 된 배열로 반환
>>> array([[False, False, False, False],
[False, False, False, True],
[ True, False, False, False]])
ndarr2d[ndarr2d > 7] #boolean이 True인 값들만 나오게 됨
>>> array([8, 9])
3-4. ndarray 슬라이싱
ndarr1 = np.array(['🥝', '🍋','🍈','🍊','🍉'])
ndarr1
>>> array(['🥝', '🍋', '🍈', '🍊', '🍉'], dtype='<U1')
ndarr1.shape # (5,): 5행(5개의 데이터가 있음)
>>> (5,)
# 슬라이싱
print(ndarr1[0:3]) # 인덱스 0번부터 3이되기 직전까지(2번인덱스까지)
print(ndarr1[1:-1]) # 인덱스 1번부터 끝에서 1번째 인덱스 전까지
print(ndarr1[2:]) # 인덱스 2번부터 끝까지
print(ndarr1[:3]) # 처음부터 인덱스번호 3번까지
>>> ['🥝' '🍋' '🍈']
['🍋' '🍈' '🍊']
['🍈' '🍊' '🍉']
['🥝' '🍋' '🍈']
# 원하는 행과 열 가져오기
# 0번째 행 가져오기
print(ndarr2d[0])
print(ndarr2d[0, ])
print(ndarr2d[0, :]) # 0행의 모든 열
>>> [1 2 3 4]
[1 2 3 4]
[1 2 3 4]
# 0번째 열 가져오기
print(ndarr2d[:, 0])
>>> [1 5 9]
728x90
반응형
LIST