넘파이(Numerical Python) 정리

Gino·2022년 2월 24일
0

노션으로 보기

선형대수 프로그래밍을 지원하는 대표적 패키지

☑️ 많은 머신러닝 알고리즘이 넘파이 기반

➕ 루프를 사용하지 않고 대량 데이터의 배열 연산 가능

➖ 일반적으로 활용되는 데이터프레임으로 변환하려면 복잡한 함수 적용

→ 그래서 대부분의 데이터 핸들링을 판다스로 하게 됨

데이터프레임 ❓

  • 2차원 형태의 행과 열로 이루어진 데이터

1. numpy 시작 → 리스트를 ndarray로 변환

import numpy as np

# np.array 함수 적용하면 리스트가 넘파이배열(ndarray)로 변환
array1 = np.array([1,2,3]) # 1차원 배열
array2 = np.array([[1,2,3],[5,6,7]]) # 2차원 배열
# '[' 수가 배열의 차원수

넘파이배열(ndarray)을 쉽게 만들고 형태도 변환할 수 있다.

2. ndarray 가지고 놀기

1) ndarray 쉽게 만들기

arange_array = np.arange(5)
	# output -> [0 1 2 3 4]
zero_array = np.zeroes((3,2), dtype='int32')
	# output -> [[0 0] [0 0] [0 0]]
		# 요소값이 모두 0인 2차원 배열 (요소 2개 1차원 배열 x 3)
# np.ones((n,e))
	# 요소값이 모두 1인 2차원 배열 (요소 e개 1차원 배열 x n)
		# dtype 값 정해주지 않으면 float 64

2) 차원과 크기 변경 → np.reshape()

arange_array = np.arange(10)
reshape_2_5 = arange_array.reshape(-1,5) # 5개 1차원 배열 기준
reshape_5_2 = arange_array.reshape(5,-1) # 요소수 5개 기준
	# 2_5 -> [[0 1 2 3 4] [5 6 7 8 9]]
	# 5_2 -> [[0 1] [2 3] [4 5] [6 7] [8 9]]

요소값을 순서대로 정렬할 수 있다.

(오름차순이 기본, 내림차순은 sort()[::-1] )

3. Numpy 정렬

1) np.sort(first_array) vs first_array.sort()

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

# np.sort(first_array) vs first_array.sort()
sort_array = np.sort(first_array)
	# first_array -> [2 1 4 3] 그대로
	# sort_array -> [1 2 3 4] (정렬 값을 본인이 가져감)
argsort_array = firstarray.sort()
	# first_array -> [1 2 3 4]
	# argsort_array -> None (희생하며 원본을 바꿈)

2) argsort() → 활용도가 매우 높음

# 정렬 후 인덱스 표시
	# 매칭되어 있던 정보를 찾을 때 자주 활용됨
name_array = np.array(['a','b','c','d','e'])
score_array = np.array([20, 30, 10, 50, 40])

sorted_index = np.argsort(score_array)
	# 정렬 후 섞인 인덱스 반환 -> [2 0 1 4 3]
name_array[sorted_index]
	# [c a b e d] 반환

3) 2차원 행렬 정렬

# 2차원 행렬 정렬, axis =0:row / axis =1:column
array2d = np.array([[8,12],
										[7,1]])
axis0 = np.sort(array2d, axis=0)
	# [7, 1], <- 같은 row(세로) 비교 (8 과 7)
	# [8, 12]
axis1 = np.sort(array2d, axis=1)
	# [8, 12],
	# [1, 7]] <- 같은 column(가로) 비교 (7 과 1)

넘파이는 매우 다양한 선형대수 연산을 지원한다.

그 중 가장 많이 사용되는 건 행렬 내적과 전치 행렬이다.

4. 행렬 내적과 전지 행렬

1) 행렬 내적 (행렬 곱) → np.dot()

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

dot_result = np.dot(a,b)
	# array([22, 28],
	#				[49, 64]])

# (1,2,3 * 1,3,5), (1,2,3 * 2,4,6)
# (4,5,6 * 1,3,5), (4,5,6 * 2,4,6)

2) 전치 행렬 → np.transpose()

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

transposed_array = np.transpose(a)
	# [[1,3],
	#	 [2,4]]

내용출처 : 파이썬 머신러닝 완벽가이드

profile
나무를 심는 사람

0개의 댓글

관련 채용 정보