Python/넘파이(NumPy)
[넘파이] - NumPy 기초
ro-jun
2024. 10. 21. 16:57
728x90
반응형
넘파이(NumPy) 란?
- 파이썬(Python) 외부 라이브러리 - 행렬 연산에 다양한 기능을 제공하는 라이브러리(https://numpy.org/).
- 내부가 C로 작성되어 있어서 처리 속도가 매우 빠르다.
- 복잡한 행렬계산, 선형대수, 통계 등의 기능 제공.
넘파이(NumPy) 배열을 사용하는 이유
- 리스트는 속도가 느리며 메모리를 많이 차지하는 단점이 있기에 배열(array)을 사용하여 적은 메모리로 많은 데이터 처리가 가능하다.
- 파이썬은 자체적으로 배열 자료형을 제공하지 않는다.
넘파이(NumPy) 배열
- 다차원의 배열 자료구조 클래스 ndarray 클래스를 지원하며 벡터와 행렬을 사용하는 선형대수 계산에 주로 사용된다.
- 벡터화 연산을 이용하여 복잡한 선형 대수 연산을 간단하게 수행할 수 있다.
넘파이(NumPy) 배열 만들기
- 1차원 배열 만들기
# 넘파이 패키지 임포트
import numpy as np
# 1차원 임의 배열 만들기
arr1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr2 = np.array(range(10))
print(arr1)
print(arr2)
print(type(arr1))
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>
- 2차원 배열 만들기
import numpy as np
# 2차원 임의 배열 만들기
arr3 = np.array([[0, 1, 2], [3, 4, 5]])
arr4 = np.array([range(3), range(3, 6)])
print(arr3)
print(arr4)
print(type(arr4))
[[0 1 2]
[3 4 5]]
[[0 1 2]
[3 4 5]]
<class 'numpy.ndarray'>
- 3차원 배열 만들기
import numpy as np
# 3차원 임의 배열 만들기
arr5 = np.array([[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]],
[[9, 10, 11],
[12, 13, 14],
[15, 16, 17]]])
print(arr5)
print(type(arr5))
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]]
<class 'numpy.ndarray'>
넘파이(NumPy) 배열 활용하기
- 벡터화 연산
# 임의 data 리스트
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 반복문 사용 (데이터 2배 만들기)
data_2times = []
for item in data:
data_2times.append(item * 2)
print(data_2times)
print(type(data_2times))
# 배열화
data_arr = np.array(data)
# 벡터화 사용 (데이터 2배 만들기)
data_arr_2times = data_arr * 2
print(data_arr_2times)
print(type(data_arr_2times))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
<class 'list'>
[ 0 2 4 6 8 10 12 14 16 18]
<class 'numpy.ndarray'>
- 배열의 차원, 크기
# 1차원 길이
print(str(len(arr1)) + "개의 요소")
print(str(len(arr3)) + "행", str(len(arr3[0])) + "열")
print(str(len(arr5)) + "깊이", str(len(arr5[0])) + "행", str(len(arr5[0][0])) + "열")
# 배열 차원
print(str(arr1.ndim) + "차원")
print(str(arr3.ndim) + "차원")
print(str(arr5.ndim) + "차원")
# 배열 크기
print(arr1.shape)
print(arr3.shape)
print(arr5.shape)
10개의 요소
2행 3열
2깊이 3행 3열
1차원
2차원
3차원
(10,)
(2, 3)
(2, 3, 3)
- 배열 인덱싱, 슬라이싱
# 1차원 배열 인덱싱
print(arr1[0])
print("-" * 10)
print(arr1[5])
print("-" * 10)
print(arr1[-1])
print("-" * 10)
# 2차원 배열 인덱싱
print(arr3[0, 0])
print("-" * 10)
print(arr3[1, 2])
print("-" * 10)
print(arr3[-1, -1])
print("-" * 10)
# 3차원 배열 인덱싱
print(arr5[0, 0, 0])
print("-" * 10)
print(arr5[1, 2, 2])
print("-" * 10)
# 1차원 배열 슬라이싱
print(arr1[2:5])
print("-" * 10)
print(arr1[3:])
print("-" * 10)
print(arr1[:7:2])
print("-" * 10)
# 2차원 배열 슬라이싱
print(arr3[0, :])
print("-" * 10)
print(arr3[1, 1:])
print("-" * 10)
print(arr3[:2, :2])
print("-" * 10)
# 3차원 배열 슬라이싱
print(arr5[0, :2, :])
print("-" * 10)
print(arr5[1, 1:, 1:])
print("-" * 10)
print(arr5[:, :2, :2])
print("-" * 10)
0
----------
5
----------
9
----------
0
----------
5
----------
5
----------
0
----------
17
----------
[2 3 4]
----------
[3 4 5 6 7 8 9]
----------
[0 2 4 6]
----------
[0 1 2]
----------
[4 5]
----------
[[0 1] [3 4]]
----------
[[0 1 2]
[3 4 5]]
----------
[[13 14]
[16 17]]
----------
[[[ 0 1]
[ 3 4]]
[[ 9 10]
[12 13]]]
----------
# 배열 인덱싱
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(arr)
print("-" * 15)
print(arr[[0, 2, 1, 1, 2], :])
print("-" * 15)
print(arr[[0, 2, 1, 1, 2], :2])
print("-" * 15)
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
---------------
[[ 1 2 3 4]
[ 9 10 11 12]
[ 5 6 7 8]
[ 5 6 7 8]
[ 9 10 11 12]]
---------------
[[ 1 2]
[ 9 10]
[ 5 6]
[ 5 6]
[ 9 10]]
---------------
728x90
반응형