Python

Numpy 기본

  • -
728x90

학교 수업시간에 numpy를 배웠다. 사실 이미 공모전이나 프로젝트 등 다양한 곳에서 판다스나 넘파이를 적용해 왔는데 그때그때 필요한 것을 공부해서 적용했었을 뿐 제대로 누군가에게 배우는 것은 처음이다. 따라서 배운 내용을 간단하게나마 요약해 보고자 한다.

1. 넘파이 배열 객체 다루기

넘파이 배열의 특징

 

  • 배열의 모든 구성요소에 값이 존재해야 함
  • 동적 타이핑 지원 x 하나의 데이터 타입만 사용
  • 각 값의 메모리 크기가 동일
# 패키기 불러오기
import numpy as np
import sys

test_array = np.array([1, 4, 5,8], dtype = float)
test_array
array([1., 4., 5., 8.])

2. 인덱싱과 슬라이싱

x = np.array([[1, 2, 3], [4, 5, 6]], int)
print(x[0][0]); print(x[0, 2])
'''
1
3
'''
x = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)

x[:, 1:3]
'''
array([[2, 3],
       [7, 8]])
'''

x[1, 1:3]
'''
array([7, 8])
'''

x[1:3]
'''
array([[ 6,  7,  8,  9, 10]])
'''
x = np.array(range(15), int).reshape(3, -1); x
'''
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
'''

x[:, ::2]
'''
array([[ 0,  2,  4],
       [ 5,  7,  9],
       [10, 12, 14]])
'''

x[::2, ::3]
'''
array([[ 0,  3],
       [10, 13]])
'''

 

3. 배열 생성함수

arange

np.arange(10
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.arange(-5, 5)
# array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4])

np.arange(0, 5, 0.5)
# array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])

 

ones, zeros, empty

np.ones(shape=(5, 2), dtype=np.int8)
'''
array([[1, 1],
       [1, 1],
       [1, 1],
       [1, 1],
       [1, 1]], dtype=int8)
'''
np.zeros(shape=(5, 2), dtype=np.float32)
'''
array([[0., 0.],
       [0., 0.],
       [0., 0.],
       [0., 0.],
       [0., 0.]], dtype=float32)
'''
np.empty(shape=(5, 2), dtype=np.float64)
'''
array([[0. , 0.5],
       [1. , 1.5],
       [2. , 2.5],
       [3. , 3.5],
       [4. , 4.5]])
'''

ones_like, zeros_like, empty_like

x = np.array(range(15), int).reshape(3, -1);

np.ones_like(x)
'''
array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]])
'''

np.zeros_like(x)
'''
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
'''

np.empty_like(x)
'''
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
'''

identity, eye, diag(정방 단위행렬, 일반 단위행렬, 주대각선 추출)

np.identity(n=3, dtype =int)
'''
array([[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])
'''

np.eye(N=3, M=5)
'''
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.]])
'''

np.eye(N=3, M=5, k=2)
'''
array([[0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

'''

x=np.arange(9).reshape(3, 3); x
'''
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
'''

np.diag(x)
'''
array([0, 4, 8])
'''

np.diag(x, k=1)
'''
array([1, 5])
'''

4. 배열 연결 함수

v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
np.vstack([v1, v2])
'''
array([[1, 2, 3],
       [4, 5, 6]])
'''

np.hstack([v1, v2])
'''
array([1, 2, 3, 4, 5, 6])
'''

아래의 concatenate 함수는 스택 계열의 함수와 달리 함수가 생성될 배열과 소스가 되는 배열의 차원과 같아야 함. 
즉, 두 v1, v2 벡터를 결합하고 싶다면 일단 2차원으로 변경이 필요함. 반환값이 2차원이기 때문

np.concatenate([v1, v2], axis=0)
'''
array([[1, 2, 3],
       [4, 5, 6]])
'''

np.concatenate([v1, v2], axis=1)
'''
array([[1, 2, 3, 4, 5, 6]])
'''

+ 추가 벡터의 내적 연산함수 'dot'

# dot 함수: 백터의 내적 연산
x_1 = np.arange(1, 7).reshape(2, 3)
x_2 = np.arange(1, 7).reshape(3, 2)
print(x_1);print(x_2); x_1.dot(x_2)
'''
[[1 2 3]
 [4 5 6]]
[[1 2]
 [3 4]
 [5 6]]
array([[22, 28],
       [49, 64]])
'''

 

5. 비교 연산과 데이터 추출

x = np.array([4, 3, 2, 6, 8, 5])
x >3
'''
array([ True, False, False,  True,  True,  True])
'''

x = np.array([1, 3, 0])
y = np.array([2, 1, 7])
x>y
'''
array([False,  True, False])
'''

 

비교 연산 함수

all과 any 
all함수: 배열 내부의 모든 값이 참일 경우 True, 하나라도 참이 아닐 경우에는 False 반환
any함수: 배열 내부의 값 중 하나라도 참일 때는 True, 모두 거짓일 경우 False 반환

x = np.array([4, 3, 2, 6, 8, 5])
(x>3).all() # False
(x>3).any() # True

 

인덱스 반환함수

x = np.array([4, 6, 7, 3, 2])

np.where(x>5, 10, 20)
'''
	
array([20, 10, 10, 20, 20])
'''

np.argsort(x)
'''
np.argsort(x)
'''

np.argmin(x) # 4
np.argmax(x) # 2

 

인덱스를 활용한 데이터 추출

# 불린 인덱스
cond = x>3
x[cond]
'''
array([4, 6, 7])
'''
# 펜시 인덱스(정수형 배열을 사용하여 해당 정수의 인덱스에 위치한 값을 반환)
x = np.array([4, 6, 7, 3, 2])
cond = np.array([1, 2, 0, 2, 2, 2,], int)
x[cond]
'''
array([6, 7, 4, 7, 7, 7])
'''
x = np.array([[1, 4], [9, 16]], int)
a = np.array([0, 1, 1, 1, 0, 0], int)
b = np.array([0, 0, 0, 1, 1, 1], int)
x[a, b]
'''
array([ 1,  9,  9, 16,  4,  4])
'''
728x90

'Python' 카테고리의 다른 글

자료구조 #1 Array  (0) 2023.12.21
자료구조 #2 Queue  (0) 2023.12.21
넘파이 ndarray의 axis축(axis≠행열)  (0) 2022.07.27
numpy 개요(ndarray와 배열의 타입)  (0) 2022.07.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.