[Data Analysis] NumPy의 기초

PSLeon ㅣ 2023. 4. 28. 00:01

반응형

NumPy

Python의 확장 모듈로서 대규모 수학 함수 라이브러리를 갖고 있으며, 연산 기능이 충실함

인공지능을 구현할 때에는 벡터, 행렬을 자주 다루므로 NumPy는 매우 유용한 툴

함수 정리

함수 역할

np.array() 배열 생성
np.zeros() ‘0.’으로 채워진 배열 생성
np.ones() ‘1.’로 채워진 배열 생성
np.arange(start, stop, step) 시작 숫자부터 마지막 숫자-1 만큼 증가폭만큼의 수를 나열한 배열 생성
  • 파이썬의 range() 함수와 동일 | | np.shape() | 배열의 형태 반환 → (행, 열) | | len() | 배열의 행 수 반환 | | np.sum() | 합계 반환 | | np.average() | 평균 반환 | | np.max() | 최댓값 반환 | | np.min() | 최솟값 반환 | | np.linspace(start, stop, num) | 시작값부터 마지막 값까지 같은 간격의 num개로 나눈 배열 생성 그래프의 가로축 값으로 자주 사용 |

import 하는 방법

import numpy as np

[0, 1, 2, 3, 4, 5] NumPy 배열 생성

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

2차원 배열은?

b = np.array([[0, 1, 2], [3, 4, 5]]) # 한번 더 []로 묶어줘야 함!
print(b)

3차원 배열은?

c = np.array([[[0, 1, 2], [3, 4, 5]], [[5, 4, 3], [2, 1, 0]]]) # []로 묶는 것 주의!
print(c)

zeros(), ones(), arange() 함수

zeros = np.zeros(8)
print(zeros) # [0. 0. 0. 0. 0. 0. 0. 0.]

ones = np.ones(8)
print(ones) # [1. 1. 1. 1. 1. 1. 1. 1.]

continunity = np.arange(8)
print(continunity) # [0 1 2 3 4 5 6 7]

arange()와 linspace() 차이:

shape() 함수, len() 함수

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

print(np.shape(a)) # (2, 3) → 2행 3열

len(a) # 2 // 행(가장 바깥쪽의 요소 수)의 수 출력 → 2행

배열의 연산

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

print(a + 3) # a 배열의 모든 요소에 각각 3씩 더한 값 출력
'''
[[3 4 5 
  6 7 8]]
'''

print(a * 3) # a 배열의 모든 요소에 각각 3씩 곱한 값 출력
'''
[[0 3 6
  9 12 15]]
'''

배열끼리의 연산

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

b = np.array([[2, -1, -1], [2, -1, -1]])
c = a + b
print(c)
print()
'''
[[2 0 1]
 [5 3 4]]
'''

d = (a+c)
print(d)
print()
'''
[[2 1 3]
 [8 7 9]]
'''

e = a*c
print(e)
'''
[[ 0  0  2]
 [15 12 20]]
'''

1·2차원 배열의 요소에 접근하기 / 요소 값 바꾸기 / 행 또는 열에 접근

a = np.arange(1, 6)
print(a) # [1 2 3 4 5]
# 1차원 배열의 요소에 접근
print(a[2]) # 0, 1, 2, 3, 4 순서로 index가 지정되어 있어서 결과가 3으로 나옴

# 1차원 배열의 요소 값 바꾸기
a[2] = 9
print(a) # [1 2 9 4 5]

b = np.array([[0, 1, 2], [3, 4, 5]])
print(b)
'''
[[0 1 2]
 [3 4 5]]
'''
# 2차원 배열의 요소에 접근
print(b[1, 2]) # 5

# 2차원 배열의 요소 값 바꾸기
b[1][2] = 9
print(b)
'''
[[0 1 2]
 [3 4 9]]
'''

c = np.array([[0, 1, 2],
              [3, 4, 5]])
print(c[1, :]) # 인덱스가 1인 행을 취득
# [3 4 5]
print()
c[:, 1] = np.array([6, 7]) # 인덱스가 1인 열을 교체
print(c)
'''
[[0 6 2]
 [3 7 5]]
'''

함수와 배열

def my_func(x):
    y = x * 2 + 1
    return y

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

print(my_func(a))
'''
[[ 1  3  5]
 [ 7  9 11]]
'''

여러 가지 함수

a = np.array([[0, 1, 2],
            [3, 4, 5]])
print(f'합계: {np.sum(a)}')
print(f'평균: {np.average(a)}')
print(f'최댓값: {np.max(a)}')
print(f'최솟값: {np.min(a)}')
'''
합계: 15
평균: 2.5
최댓값: 5
최솟값: 0
'''

**□문제

Jupyter Notebook의 셀에 NumPy의 2차원 배열을 두 개 기술하고, 두 개의 합, 차, 곱을 구합시다(리스트2.48).

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

''' 연립 이차방정식으로 x, y값 구했음
x1=0 x2=1 x3=2
x4=3 x5=4 x6=5

y1=5 y2=4 y3=3
y4=2 y5=1 y6=0
'''
print(a+b)
print()
print(a-b)
print()
print(a*b)
'''
[[5 5 5]
 [5 5 5]]

[[-5 -3 -1]
 [ 1  3  5]]

[[0 4 6]
 [6 4 0]]
'''