728x90
728x90
Numpy
👉 Python에서 대규모 다차원 배열 다룰 수 있게 도와주는 라이브러리
장점
- 반복문 없이 배열 처리 가능
- list 보다 빠른 연산 , 메모리 효율적 사용
list vs numpy 배열 생성
- list
arr=list(range(3))
print(arr) # [0,1,2] -> 콤마(,)로 구분됨
print(type(arr)) # <class 'list'>
- numpy
import numpy as np
arr=np.array(range(3)) # np.arange(3)도 같은 결과
print(arr) # [0 1 2] -> 공백으로 구분
print(type(arr)) # <class 'numpy.ndarray'>
배열의 '데이터의 타입' dtype
(list와 달리 같은 데이터 타입만 저장 가능)
arr=np.array([0,1,2], dtype=float)
print(arr) # [0. 1. 2.]
print(arr.dtype) # 'float64'
print(arr.astype(int)) # [0 1 2]
ndarray 속성 - ndim(차원) & shape(모양)
arr_1d=np.array([0, 1, 2]) # 1차원 배열
arr_2d=np.array([[0,1,2],[1,2,3]]) # 2차원 배열
print(arr_1d.ndim) # 1 -> 차원 수
print(arr_1d.shape) # (3,) -> 배열의 모양
print(arr_2d.ndim) # 2
print(arr_1d.shape) # (2, 3)
'''
1. 배열 모양 : arr.shpe
2. 배열 요소의 개수 : arr.size
3. 배열 길이 : len(arr)
'''
arr=np.array([0,1,2,3,4,5])
print( arr.shape ) # (6,)
print( arr.size ) # 6
print( len(arr) ) # 6
arr.shape=3,2 # shape 조절됨 -> [[0 1] [2 3] [4 5]]
print( arr.shape ) # (3,2)
print( arr.size ) # 6
print( len(arr) ) # 3
인덱싱 & 슬라이싱
- 인덱싱 (인덱스로 값 찾아냄)
# 1차원
x=np.arange(5) # [0 1 2 3 4 5]
print(x[3]) # 3
x[0]=10 # 인덱싱 사용해서 값 변경
print(x) # [10 1 2 3 4 5]
# 2차원
x=np.arange(1, 13 ,1) # [ 1 2 3 4 5 6 7 8 9 10 11 12]
x.shape=3,4
print(x)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
print(x[2,3]) # 12
- 슬라이싱 (인덱스 값으로 배열의 일부분 가져옴)
arr[a:b] -> a부터 b-1까지 인덱스에 해당하는 부분
arr[a:b, c:d] -> arr에서 행은 a부터 b-1까지 / 열은 c부터 d-1까지에 해당하는 부분
# 1차원
x=np.arange(7) # [0 1 2 3 4 5 6]
print(x[1:4]) # [1 2 3] -> 1부터 3까지
print(x[1:]) # [1 2 3 4 5 6] -> 1부터 끝까지
print(x[:4]) # [0 1 2 3] -> 처음부터 3까지
print(x[::2]) # [0 2 4 6] -> 처음부터 끝까지, 2칸씩
# 2차원
x=np.arange(1, 13 ,1) # [ 1 2 3 4 5 6 7 8 9 10 11 12]
x.shape=3,4
print(x)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
print(x[1:2,2:3]) # [[7]] -> 행: 1~1까지, 열:2~2까지
print(x[1:,:2]) # 행:1~끝까지, 열:처음부터~1까지
'''
[[ 5 6]
[ 9 10]]
'''
- Boolean indexing (배열의 각 요소를 Boolean mask를 사용해서 지정)
boolean mask? : True,False로 구성된 mask array
x=np.array(7) # [0 1 2 3 4 5 6]
print(x<3) # [ True True True False False False False]
print(x[x<3]) # [0 1 2] -> Boolean mask의 True에 해당하는 index만 조회
- Fancy indexing (배열의 각 요소 선택을 직접 index 배열 전달해서 지정)
x=np.arange(7) # [0 1 2 3 4 5 6]
print(x[[1,3,5]])# [1 3 5]
- indexing과 slicing 조합해서 사용가능
x=np.arange(1,13,1).reshape(3,4)
print(x)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
print(x[1:2,2]) # [7]
print(x[[0,2],2]) # [3 11] -> '행: 0,2 인것' 중 '열: 2 인것'
print(x[[0,2], :2]) # -> '행: 0,2 인것' 중 '열: 처음부터 2까지 인것'
'''
[[ 1 2]
[ 9 10]]
'''
전체 실습
import numpy as np
#1부터 15까지 들어있는 (3,5)짜리 배열 생성
matrix = np.array(range(1,16))
matrix.shape = 3,5
''' matrix
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]]
'''
# 1. matrix 자료형
print(type(matrix)) # <class 'numpy.ndarray'>
# 2. 차원
print(matrix.ndim) # 3
# 3. 모양
print(matrix.shape) # (3,5)
# 4. 크기
print(matrix.size) # 15
# 5. matrix의 dtype(data type)
print(matrix.dtype) # int64
# 6. matrix의 dtype을 str로 변경
print(matrix.astype('str'))
'''
[['1' '2' '3' '4' '5']
['6' '7' '8' '9' '10']
['11' '12' '13' '14' '15']]
'''
# 7. matrix의 (2,3) 인덱스의 요소
print(matrix[2:3]) # [[11 12 13 14 15]]
# 8. matrix의 행은 인덱스 0부터 인덱스 1까지, 열은 인덱스 1부터 인덱스 3까지
print(matrix[0:2,1:4])
'''
[[2 3 4]
[7 8 9]]
'''
728x90
728x90
'ML & DL > 데이터 분석' 카테고리의 다른 글
[pandas] Dataframe 행 위,아래로 옮기기 : shift() (0) | 2022.06.02 |
---|---|
[python] Pandas 기초 (0) | 2021.10.03 |
[python] 웹페이지 크롤링 기초 (0) | 2021.09.28 |
댓글