배열 데이터를 효과적으로 다루는 NumPy
시퀀스 데이터로부터 배열 생성
import numpy as np
data1 = [0, 1, 2, 3, 4, 5]
a1 = np.array(data1)
2차원 배열 생성 방법
np.array([[1,2,3], [4,5,6], [7,8,9]])
a2 = np.arange(10, 100, 10).reshape(3,3)
# array([[10, 20, 30],
# [40, 50, 60],
# [70, 80, 90]])
범위를 지정한 배열 생성
np.arange(0, 10, 2)
np.arange(1, 10) #step 생략
np.arange(5) #start , step 생략
reshape를 추가해 1차 배열을 2차 배열로 변경하기
np.arange(12).reshape(4,3) # 배열의 원소 개수와 reshape(m, n)의 m * n의 개수가 같아야 함
배열의 형태 출력
# 2차원 배열의 경우
b1 = np.arange(12).reshape(4,3)
b1.shape # (4,3)
# 1차원 배열의 경우
b2 = np.arange(5)
b2.shape # (5,)
범위의 시작과 끝을 지정한 후 데이터의 개수를 지정해 Numpy 배열 생성
1. 시작과 끝 길이가 지정 데이터의 개수와 같을때
np.linspace(1, 10 , 10)
# array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
2. 시작과 끝 길이가 지정한 데이터의 개수와 다를때
np.linspace(0, np.pi, 10 )
# array([0. , 0.34906585, 0.6981317 , 1.04719755, 1.3962634 ,
# 1.74532925, 2.0943951 , 2.44346095, 2.7925268 , 3.14159265])
모든 원소가 0 과 1인 다차원 배열을 만들기 위해서는 zeros()와 ones() 사용
np.zeros(10) # 1차원 10개
np.zeros((3,4)) # 2차원 총 12개 원소
np.ones(5) # 1차원
np.ones((3,5)) # 2차원
단위 행렬 생성 = n*n인 정사각형 행렬에서 주 대각선이 모두 1이고 나머지가 0인 행렬
np.eye(3)
# array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
문자열이 원소인 Numpy 배열
np.array(['1.5', '0.62', '2', '3.14', '3.141592'])
# array(['1.5', '0.62', '2', '3.14', '3.141592'], dtype='<U8')
배열의 형변환 문자열>>실수
str_a1 = np.array(['1.567', '0.123', '5.123', '9', '8'])
num_a1 = str_a1.astype(float)
num_a1
# array([1.567, 0.123, 5.123, 9. , 8. ]) 실수형으로 변환
배열의 형변환 실수>>정수
num_f1 = np.array([10, 21, 0.549, 4.75, 5.98])
num_i1 = num_f1.astype(int)
num_i1
# array([10, 21, 0, 4, 5])
난수 배열의 생성
rand() = 0과 1 사이의 실수 난수를 갖는 Numpy 배열 생성
# 0~1사이의 2행3열 배열
np.random.rand(2,3)
# array([[0.08420555, 0.57055973, 0.27258145],
# [0.3684193 , 0.81675464, 0.03088455]])
# 3차원 배열 (뒤에서부터 4개짜리 3개 >> 3개짜리 2개)
np.random.rand(2,3,4)
# array([[[0.12604778, 0.58087328, 0.93390461, 0.71172255],
# [0.13341364, 0.76434279, 0.1081062 , 0.1690872 ],
# [0.36756175, 0.35144066, 0.58077276, 0.56255779]],
#
# [[0.37467747, 0.16625662, 0.38109622, 0.81327819],
# [0.07048931, 0.36569228, 0.10417258, 0.33516825],
# [0.51510411, 0.82097616, 0.92401257, 0.64208011]]])
randint() = [low,high] 사이의 정수 난수를 갖는 배열 생성
np.random.randint(1, 30)
# 1~30까지
np.random.randint(46, size=(3, 2)) # 사이즈를 지정하지 않으면 1
# 1~46 까지 랜덤 정, 2개 특성을 가진 리스트 3개
# array([[26, 33],
# [ 4, 27],
# [15, 24]])
통계를 위한 연산
합계sum()와 평균mean()
arr3 = np.arange(5)
# array([0, 1, 2, 3, 4])
[arr3.sum(), arr3.mean()]
# [10, 2.0]
표준편차std()와 분산var()
표준편차 = 평균을 중심으로 퍼져있는 정도
분산 = 변량이 평균으로 부터 떨어져 있는 정도
[arr3.std(), arr3.var()]
# [1.4142135623730951, 2.0]
최솟값 min(), 최댓값 max(), 누적합cumsum(), 누적곱, cumprod()도 연산 가능
배열의 슬라이싱
2차 배열에서의 슬라이싱
b2 = np.arange(10, 100, 10).reshape(3,3)
# array([[10, 20, 30],
# [40, 50, 60],
# [70, 80, 90]])
b2[1:3, 1:3] # [행시작:행끝, 열시작:열끝]
b2[:3, 1:]
b2[1][0:2] # 행을 지정하고 열을 슬라이싱
b2[0:2,1:3] = np.array([[25, 35], [55, 65]]) # 슬라이싱 된 배열에 값 지정하기
행렬곱, 전치행렬, 역행렬, 행렬식
'[Python]' 카테고리의 다른 글
[Python] 빅데이터분석기사 기초 통계 (1) | 2023.10.26 |
---|---|
[Python] 빅데이터분석기사 실기 연습(작업형2) (0) | 2023.10.18 |
[Python] 빅데이터분석기사 실기 연습(작업형1) (0) | 2023.10.18 |
[Python] 통계 기본 정리 (0) | 2023.04.03 |
[Python] pandas 기본 (0) | 2023.03.09 |