Numpy
Numpy는 수치해석, 통계관련 기능을 제공하는 Python 라이브러리이다.
용어
- Axis: 배열의 각 축을 의미
- 2차원에서 axis0은 열방향( ⬇️ ), axis1은 행방향을 의미( ➡️ )
- Rank: 축의 개수 (차원), ex) 1차원, 2차원, 3차원 ...
- Shape: 축의 개수
라이브러리 불러오기
- 별칭 없이 라이브러리 불러오기
- 별칭을 주고 라이브러리 불러오기
- 특정 함수만 불러오기
# 별칭 없이 라이브러리 불러오기
import numpy
a = numpy.array([1,2])
# 별칭 주고 라이브러리 불러오기
import numpy as np
a = np.array([1,2])
# 특정 함수만 불러오기
from numpy import array
a = array([1,2])
배열 만들기 numpy.array(리스트)
1차원 배열
# 라이브러리
import numpy as np
# 1차원 배열 생성
a = np.array([1,2,3])
# 차원
print(a.ndim) # 1
# 모양
print(a.shape) # (3, ) 원소 3개인 1차원 배열
# 데이터 형식
print(a.dtype) # int
# 배열 원소 조회
print(a[0], a[1], a[2]) # 1 2 3
2차원 배열
# 라이브러리
import numpy as np
# 1차원 배열 생성
a = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
# 차원
print(a.ndim) # 2
# 모양
print(a.shape) # (3, 2) 원소 3개인 2차원 배열
# 데이터 형식
print(a.dtype) # int
# 배열 원소 조회
print(a[0][0], a[1][1], a[2][2]) # 1 5 9
3차원 배열
# 라이브러리
import numpy as np
# 1차원 배열 생성
a = np.array([
[[1,2,],[3,4]],
[[5,6],[7,8]]
])
# 차원
print(a.ndim) # 3
# 모양
print(a.shape) # (2, 2, 2) (2,2) 크기의 2차원 배열이 2개
# 데이터 형식
print(a.dtype) # int
# 배열 원소 조회
print(a[0][0], a[1][1]) # [1 2] [7 8]
Axis0 의 의미
- 데이터의 건수를 의미한다.
2차원 데이터의 Shape가 (200, 4) 이라고 가정해보자. 이때 의미는 컬럼이 4개인 데이터가 100개 있다는 의미이다.
코드로 작성해서 확인해보면 다음과 같다.
# 라이브러리
import numpy as np
a0 = ['Kim', 20, 201324, 'A']
student = np.array([a0] * 100)
print(student.shape) # (100, 4)
print(student.ndim) # 2
a0 은 학생a의 이름, 나이, 학번, 성적 정보를 가지고 있는 리스트이다.
해당 리스트를 np.array() 메소드를 통해서 100개의 데이터를 배열로 만드는 코드이다.
shape를 확인해보면 4개의 컬럼으로 이루어진 100개의 데이터다! 라는 것을 확인할 수 있고, ndim (차수)가 2차원 인것을 확인할 수 있다.
Reshape
기존 배열의 Shape를 새로운 형태의 배열로 재구성하는 함수
배열.reshape(행, 열)
np.reshape(배열, 행, 열)
- array.reshape(3, -1) # array를 3행으로 된 배열로 변환
- array.resahpe(-1, 3) # array를 3열로 된 배열로 변환
import numpy as np
list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
array_a = np.array(list_a)
print(array_a)
# [[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]
# [10 11 12]]
print(array_a.shape) # (4, 3)
array_a = array_a.reshape(12, )
print(array_a)
# [ 1 2 3 4 5 6 7 8 9 10 11 12]
print(array_a.shape) # (12, )
array_a = array_a.reshape(6, -1)
print(array_a)
# [[ 1 2]
# [ 3 4]
# [ 5 6]
# [ 7 8]
# [ 9 10]
# [11 12]]
print(array_a.shape) # (6, 2)
array_a = array_a.reshape(-1, 6)
print(array_a)
# [[ 1 2 3 4 5 6]
# [ 7 8 9 10 11 12]]
print(array_a.shape) # (2, 6)
배열 데이터 조회
인덱싱
요소 조회
- 배열[행인덱스, 열인덱스]
- 배열[행인덱스][열인덱스]
행 조회
- 배열[행 인덱스. :]
- 배열[행 인덱스]
- 배열[[행1, 행2]]
- 배열[[행1, 행2], :]
요소 조회 예제 코드
import numpy as np
list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
array_a = np.array(list_a)
print(array_a[0,0]) # 1
print(array_a[0][0]) # 1
행 조회 예제 코드
import numpy as np
list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
array_a = np.array(list_a)
print(array_a[0, :]) # [1 2 3]
print(array_a[1]) # [4 5 6]
print(array_a[[0,1]]) # [[1 2 3] [4 5 6]]
print(array_a[[0,1], :]) # [[1 2 3] [4 5 6]]
슬라이싱
- 배열[시작:끝]
- 배열[행인덱스, 시작:끝]
- 배열[시작:끝, 시작:끝]
import numpy as np
list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
array_a = np.array(list_a)
print(array_a[0:2]) # [[1 2 3] [4 5 6]]
print(array_a[0, 0:2]) # [1 2]
print(array_a[0:2, 0:2]) # [[1 2] [4 5]]
집계 함수
sum(), mean(), std() 모두 옵션없이 사용하면, 전체 데이터에 대한 집계가 계산된다.
- numpy.sum() : 합계
- numpy.mean() : 평균
- numpy.std() : 표준편차
option
- axis = 0 : 행 방향 집계
- axis = 1 : 열 방향 집계
import numpy as np
list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
array_a = np.array(list_a)
# no option
# numpy.sum()
# 함수로서 사용
print(np.sum(array_a)) # 78
# 메소드로서 사용
print(array_a.sum()) # 78
# numpy.mean()
# 함수로서 사용
print(np.mean(array_a)) # 6.5
# 메소드로서 사용
print(array_a.mean()) # 6.5
# numpy.std()
# 함수로서 사용
print(np.std(array_a)) # 3.452052529534663
# 메소드로서 사용
print(array_a.std()) # 3.452052529534663
# axis=0
# numpy.sum()
print(array_a.sum(axis=0)) # [22 26 30]
# numpy.mean()
print(array_a.mean(axis=0)) # [5.5 6.5 7.5]
# numpy.std()
print(array_a.std(axis=0)) # [3.35410197 3.35410197 3.35410197]
# axis=1
# numpy.sum()
print(array_a.sum(axis=1)) # [ 6 15 24 33]
# numpy.mean()
print(array_a.mean(axis=1)) # 2. 5. 8. 11.]
# numpy.std()
print(array_a.std(axis=1)) # [0.81649658 0.81649658 0.81649658 0.81649658]
가장 큰(작은) 값의 인덱스 반환
- numpy.argmax(array, axis)
- numpy.argmin(array, axis)
- axis 생략: 전체 데이터
- axis 0 : 열 기준 큰 값
- axis 1 : 행 기준 큰 값
import numpy as np
list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
array_a = np.array(list_a)
# 전체 데이터 중 큰 값 인덱스 조회
print(np.argmax(array_a)) # 11
# axis = 0
# 열 별로 가장 큰 값의 인덱스 조회
print(np.argmax(array_a, axis=0)) # [3 3 3]
# axis = 1
# 행 별로 가장 큰 값의 인덱스 조회
print(np.argmax(array_a, axis=1)) # [2 2 2 2]
# 전체 데이터 중 작은 값 인덱스 조회
print(np.argmin(array_a)) # 0
# axis = 0
# 열 별로 가장 작은 값의 인덱스 조회
print(np.argmin(array_a, axis=0)) # [0 0 0]
# axis = 1
# 행 별로 가장 작은 값의 인덱스 조회
print(np.argmin(array_a, axis=1)) # [0 0 0 0]
조건에 따라 값 지정하기 :: numpy.where
numpy.where(조건문, 참일 때 값, 거짓일 때 값)
import numpy as np
list_a = [1,2,3,4,5,6,7]
array_a = np.array(list_a)
array_a = np.where(array_a < 4, 1, 0)
print(array_a) # [1 1 1 0 0 0 0]
728x90
'Language > Python' 카테고리의 다른 글
[Pandas] 시계열 데이터 처리 (0) | 2024.03.01 |
---|---|
[Pandas] 데이터분석을 위한 데이터 전처리 (2) | 2024.03.01 |
[Pandas] Pandas 기초 (0) | 2024.03.01 |
[Python] List, Dictionary (0) | 2024.02.28 |