NumPy 란?

NumPy는 Python의 과학 연산을 위한 가장 기본적인 패키지 중 하나이다.
NumPy는 "Numeric Python"의 약자이며,
대규모 다차원 배열과 행렬 연산에 필요한 다양한 함수와 매서드를 제공한다.
NumPy는 데이터 분석, 데이터 처리, 선령 대수, 머신 러닝 등 다양한 분야에서 널리 사용되고 있다.

 

NumPy 설치

NumPy를 사용하기 위해서는 패키지를 설치해야한다.

설치 방법은 다음과 같다.

1. cmd 창 접속

cd C:\현재 내 Python 프로젝트 폴더 상위 폴더

 

2. NumPy 설치

pip install numpy

 

번외) 팀원 패키지 개발 환경 맞추기

# 패키지를 공유할 팀원
pip freeze > 파일명 지정.txt

# 패키지를 공유 받을 팀원
pip install -r 공유받은 파일명.txt

 

NumPy 배열 생성

NumPy 배열은 ndarray 클래스를 사용해 생성한다.

import numpy as np

# 1차원 배열
a= np.array([1,2,3])

# 2차원 배열
b= np.array([1,2,3],[4,5,6])

# 3차원 배열
c= np.array([[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]])

 

NumPy 배열의 크기를 확인하는 방법을 shape 속성을 사용한다.

print(a.shape) #(3,)
print(b.shape) #(2,3)
print(c.shape) #(2,2,3)

 

NumPy 배열 연산

NumPy 배열은 다른 배열 또는 스칼라의 연산을 지원한다.

NumPy 배열의 연산은 배열의 원소별(element-wise)로 이뤄진다.

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 원소별 덧셈
c = a + b # [5, 7, 9]
# 원소별 곱셈
d = a * b # [4, 10, 18]
# 스칼라 연산
e = a + 1 # [2, 3, 4]

 

NumPy 배열의 연산에는 다양한 함수와 메서드가 있다.

가장 기본적인 연산은 Sum, Mean, Min, Max가 있다.

a = np.array([1, 2, 3])

# 합계
b = np.sum(a)  # 6

# 평균
c = np.mean(a)  # 2.0

# 최소값
d = np.min(a)  # 1

# 최대값
e = np.max(a)  # 3

 

NumPy 배열 인덱싱과 슬라이싱

NumPy 배열의 인덱싱과 슬라이싱은 Python 리스트의 인덱싱과 슬라이싱과 매우 유사하다.

NumPy 배열의 인덱싱과 슬라이싱을 사용하여 배열의 일부를 선택할 수 있다.

a = np.array([1, 2, 3, 4, 5])

# 인덱싱
b = a[0] # 1
c = a[2] # 3

# 슬라이싱
d = a[1:4]  # [2,3,4]
e = a[:3]   # [1,2,3]
f = a[3:]   # [4,5]

 

다차원 NumPy 배열에서는 각 차원의 인덱스를 콤마로 구분하여 인덱싱한다.

a = np.array([1, 2, 3][4, 5, 6])

# 인덱싱
b = a[0, 0] # 1
c = a[1, 2] # 6

# 슬라이싱
d = a[0, 1:3]  # [2,3]
e = a[:, 1]   # [2,5]
f = a[:, :2]   # [[1,2], [4,5]]

 

NumPy 배열 형태 변경

NumPy 배열 형태 변경은 다음과 같다.

a = np.array([[1, 2], [3, 4], [5, 6]])

# 배열의 형태 변경
b = a.reshpe((2,3)) # [[1,2,3],[4,5,6]]

# 배열 전치(0,1,2,... 순서대로 배열을 변경)
c = a.T # [[1,3,5],[2,4,6]]

 

NumPy 배열 병합과 분리

NumPy 배열을 병합하는 방법은 다음과 같다.

# 배열 형태 변경
a = np.array([[1, 2], [3, 4], [5, 6]])

# 배열의 형태 변경
b = a.reshpe((2,3)) # [[1,2,3],[4,5,6]]

# 배열 전치(0,1,2,... 순서대로 배열을 변경)
c = a.T # [[1,3,5],[2,4,6]]

 

다차원 배열을 병합하는 방법은 concatenate() 함수를 사용한다.

두개 이상의 배열을 병합할 경우에는 튜플 형태로 전달한다.

axis 인자를 사용해 병합할 방향을 지정할 수 있다.

axis 인자를 지정하지 않을 경우 기본값인 0으로 설정된다.

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 배열 병합
c = np.concatenate((a,b))

a = np.array([[1,2],[3,4]])
b = np.array([[5,6]])

# 배열 병합
c = np.concatenate((a,b), axis=0) # [[1,2],[3,4],[5,6]]

 

NumPy 배열 분리는 방법은 다음과 같다.

a = np.array([1,2,3,4,5,6])

# 배열 분리
b, c = np.split(a, [3]) # [1,2,3],[4,5,6]

 

NumPy 다차원 배열 분리

a = np.array([[1,2,3],[4,5,6]])

# 다차원 배열 분리
b, c = np.split(a, [1], axis=1) # [[1,2,3]], [[4,5,6]]

 

NumPy 주요 함수

NumPy는 배열의 계산과 관련된 다양한 함수를 제공한다.

가장 많이 사용되는 함수들은 다음과 같다.

  • np.zeros() : 모든 원소가 0인 배열을 생성한다.
  • np.ones() : 모든 원소가 1인 배열을 생성한다.
  • np.arange() : 범위 내의 일정 간격으로 원하는 개수의 배열을 생성한다.
  • np.linspace() : 범위 내에서 균등 간격으로 원하는 개수의 배열을 생성한다.
  • np.random.random() : 0 부터 1 사이의 난수를 가지는 배열을 생성한다.
  • np.random.randn() : 평균이 0이고 표준편차가 1인 정규 분포를 따르는 난수를 가지는 배열을 생성한다.

이 외에도 다양한 수학 함수를 제공한다.

np.sin(), np.cos(), np.exp(), np.log() 등이 있다.

이런 함수들은 NumPy 배열에서 사용되고 배열의 원소를 계산한다.

np.zeros()

arr = np.zeros((2,3))
print(arr)
## 출력 결과
## [[0. 0. 0.]
##  [0. 0. 0.]]

np.ones()

arr = np.ones((2, 4))
print(arr)
## 출력 결과
## [[1. 1. 1. 1.]
##  [1. 1. 1. 1.]]

np.arange()

arr = np.arange(1, 10, 2)
print(arr)
## 출력 결과
##[1 3 5 7 9]

np.linspace()

arr = np.linspace(0, 1, 5)
print(arr)
## 출력 결과
##[0.   0.25 0.5  0.75 1.  ]

np.random.random()

arr = np.random.random((3, 3))
print(arr)
## 출력 결과
##[[0.82836207 0.64923568 0.29160684]
## [0.2379626  0.19701923 0.97156495]
## [0.87808482 0.24896966 0.38251797]]

np.random.randn()

arr = np.random.randn(2, 4)
print(arr)
## 출력 결과
##[[ 1.56279348  1.81959248  0.12930661  0.03816557]
## [-0.30739358 -1.10211943 -0.94918405  0.23520864]]

 

 

NumPy 수학 함수

sum(), mean() : 배열 전체 합, 평균
cumsum(), cumprod() : 배열 누적 합, 누적 곱
std(), var() : 표준편차, 분산
min(), max() : 최소값, 최대값
argmin(), argmax(): 최소 원소의 색인 값, 최대 원소의 색인 값

 

NumPy 난수 함수

seed() : 난수 발생기의 seed를 지정한다.
permutation() : 임의의 순열을 반환한다.
shuffle() : 리스트나 배열의 순서를 뒤섞는다.
rand() : 균등분포에서 표본을 추출한다.
randint() : 주어진 최소/최대 범위 안에서 임의의 난수를 추출한다.
randn() : 표준편차가 1이고 평균값이 0인 정규분포에서 표본을 추출한다.
binomial() : 이항분포에서 표본을 추출한다.
normal() : 정규분포(가우시안)에서 표본을 추출한다.
beta() : 베타분포에서 표본을 추출한다.
chisquare() : 카이제곱분포에서 표본을 추출한다.
gamma() : 감마분포에서 표본을 추출한다.
uniform() : 균등(0,1)에서 표본을 추출한다.

 

728x90

'추가 공부 > Python' 카테고리의 다른 글

[pyplot] 한글 깨짐 설정  (0) 2024.11.30
[Python] csv 모듈을 활용한 파일 입출력  (0) 2024.11.27
[Python] 연산자  (2) 2024.11.23
[Python] 변수와 자료형  (0) 2024.11.22
[Python] 기본 자료형  (0) 2024.11.22
개발자가 되고 싶은 곰