| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- Transformer
- 정보처리기사
- 기초
- 에이전트
- 랭그래프
- RDBMS
- 데이터 시각화
- 자연어처리
- 머신러닝
- LangGraph
- 딥러닝
- 소프트웨어 개발
- TTS
- python 기초
- 힙정렬
- 객체지향
- 데이터엔지니어
- 트랜스포머
- ASR
- 알고리즘
- UMAP
- dementional reduction
- 캐글
- RNN
- CLIP
- Python
- CNN
- SQL
- 생성형 인공지능
- python기초
Archives
- Today
- Total
수달이네 기술 블로그
1. numpy 본문
넘파이란?
파이썬에서 사용되는 과학, 수학연산을 위한 라이브러리로 다차원 배열을 다루는데에 특화되어 있다.
- 데이터 분석, 머신러닝, 과학 계산등에서 사용된다.
import numpy as np
넘파이의 특징과 기능
ndarray
ndarray(다차원 배열): 넘파이를 import하면 사용할 수 있는 배열 자료구조
- c언어로 구현되어 연산이 빠르고 효율적이다. 큰 데이터 셋에서 수치 연산을 수행할 때 뛰어난 성능을 보인다.
- 파이썬의 list와는 달리 한가지 데이터만 가질 수 있다.
import numpy as np
ndarr1 = np.array([1, 2, 3, 4])
print(ndarr1)
print(type(ndarr1)) # <class 'numpy.ndarray'>
print(type(ndarr1[0])) # <class 'numpy.int64'>
ndarr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(ndarr2)
print(type(ndarr2)) # <class 'numpy.ndarray'>
print(type(ndarr2[0])) # <class 'numpy.ndarray'>
리스트와 다르게 타입은 numpy.ndarray라 나타나며 int또한 numpy.int64값이 저장되는 것을 알 수 있다.
리스트를 ndarray로 만들어줄 수 있다.
# 리스트를 ndarray로 변환
list1 = [1, 2, 3, 4]
ndarr1 = np.array(list1)
print(ndarr1)
print(type(ndarr1))
# ndarray를 리스트로 변환
list2 = ndarr1.tolist()
print(list2)
print(type(list2))
그러나 ndarray는 같은 자료형만 들어갈 수 있는데 다른 자료형이 들어간 리스트가 들어간다면 어떻게 될까
ndarr2 = np.array([1, 2, 3.14, 4])
print(ndarr2)
print(type(ndarr2))
print(type(ndarr2[0]))
print(type(ndarr2[1]))
print(type(ndarr2[2]))
print(type(ndarr2[3]))
#[1. 2. 3.14 4. ]
#<class 'numpy.ndarray'>
#<class 'numpy.float64'>
#<class 'numpy.float64'>
#<class 'numpy.float64'>
#<class 'numpy.float64'>
가장 큰 범주에 있는 값인 float로 모두 변환된 것을 알 수 있다.
ndarr3 = np.array([1, 2, 3.14, True])
print(ndarr3)
print(type(ndarr3))
print(type(ndarr3[0]))
print(type(ndarr3[1]))
print(type(ndarr3[2]))
print(type(ndarr3[3]))
#[1. 2. 3.14 1. ]
#<class 'numpy.ndarray'>
#<class 'numpy.float64'>
#<class 'numpy.float64'>
#<class 'numpy.float64'>
#<class 'numpy.float64'>
bool형 또한 마찬가지로 float가 된다.
ndarr4 = np.array(['1', 2, 3.14, True])
print(ndarr4)
print(type(ndarr4))
print(type(ndarr4[0]))
print(type(ndarr4[1]))
print(type(ndarr4[2]))
print(type(ndarr4[3]))
# ['1' '2' '3.14' 'True']
# <class 'numpy.ndarray'>
# <class 'numpy.str_'>
# <class 'numpy.str_'>
# <class 'numpy.str_'>
# <class 'numpy.str_'>
위처럼 string 형이 포함되어있다면 문자열로 바뀐다.
ndarr3 = np.array([1, 2, 3.14, True], dtype=int)
print(ndarr3)
print(type(ndarr3))
print(type(ndarr3[0]))
print(type(ndarr3[1]))
print(type(ndarr3[2]))
print(type(ndarr3[3]))
# [1 2 3 1]
# <class 'numpy.ndarray'>
# <class 'numpy.int64'>
# <class 'numpy.int64'>
# <class 'numpy.int64'>
# <class 'numpy.int64'>
만약 위와 같이 강제로 변환시켜 주면 강제로 int형이 된다.
인덱싱과 슬라이싱도 지원한다.
ndarr1 = np.array(['🍓', '🍉', '🍌', '🍒', '🍑'])
print(ndarr1)
print(ndarr1.shape)
# 인덱싱
print(ndarr1[0])
print(ndarr1[4])
print(ndarr1[-1])
print(ndarr1[-2])
# 슬라이싱
print(ndarr1[0:3])
print(ndarr1[2:])
print(ndarr1[:3])
# ['🍓' '🍉' '🍌' '🍒' '🍑']
# (5,)
# 🍓
# 🍑
# 🍑
# 🍒
# ['🍓' '🍉' '🍌']
# ['🍌' '🍒' '🍑']
# ['🍓' '🍉' '🍌']
이차원 배열을 지원하는데 이걸 통해서 배열의 모양을 확인할 수도 있다.
ndarr1 = np.array([['🍓', '🍉'], [ '🍒', '🍑']])
print(ndarr1)
print(ndarr1.shape)
# [['🍓' '🍉']
# ['🍒' '🍑']]
# (2, 2)
위와 같이 shape를 사용한다.
import pandas as pd
# 데이터 경로
data_path = '/kaggle/input/2025-2-data-solution-p-01/'
train = pd.read_csv(data_path + 'train.csv', index_col='id')
test = pd.read_csv(data_path + 'test.csv', index_col='id')
submission = pd.read_csv(data_path + 'submission.csv', index_col='id')
train.shape, test.shape
#((250000, 24), (50000, 23))
위 코드는 내가 진행하는 범주형 머신러닝 실습 코드이다.
여기서 shape를 사용하여 데이터의 구조를 확인할 수 있다.
인덱싱 상세
# 2차원 배열
ndarr2d = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(ndarr2d)
print(ndarr2d.shape)
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]]
# (3, 4)
# 0행 가져오기
print(ndarr2d[0, :])
print(ndarr2d[0,])
print(ndarr2d[0])
# [1 2 3 4]
# [1 2 3 4]
# [1 2 3 4]
# 0열 가져오기
print(ndarr2d[:, 0])
# [1 5 9]
ndarr1 = np.array([10, 15, 2, 8, 20, 90, 85, 44, 23, 32])
idx = [2, 5, 9]
print(ndarr1[idx]) # ndarr1[[2, 5, 9]]
ndarr2d = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(ndarr2d[[0, 1], :])
#[[1 2 3 4]
# [5 6 7 8]]
위처럼 인덱스를 , 를통해 여러개를 가져오게 할 수도 있다.
또한 위와 같이 0, 1행의 모든 값을 다가져와 또한 할 수 있다.
boolean인덱싱
- 아래처럼 true와 false를 통해 출력할 내용을 정해줄 수 있다.
ndarr1 = np.array(['🍓', '🍉', '🍌', '🍒', '🍑'])
sel = [True, False, True, True, False]
print(ndarr1[sel])
# ['🍓' '🍌' '🍒']
이걸 사용해서 아래처럼 boolean 인덱싱이 가능하다.
ndarr2d = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(ndarr2d > 7)
print(ndarr2d[ndarr2d > 7])
# [[False False False False]
# [False False False True]
# [ True True True True]]
# [ 8 9 10 11 12]
- 즉 array에서 true인 값만 출력할 수 있도록 할 수도 있다.
행렬연산
numpy에선 행렬연산이 가능하다.
- (선형대수와 관련이 깊어 데이터 과학, 머신러닝, 통계 등에서 자주 사용한다.)
- 선형대수: 벡터와 행렬을 사용해 공간과 변환을 다루는 수학의 한 분야입니다. 쉽게 말해, 여러 숫자를 체계적으로 배열한 벡터(리스트 같은 것)와 행렬(숫자가 격자로 배열된 표)을 이용해 데이터를 표현하고 조작하는 방법
a = np.array([[1, 2, 3],
[2, 3, 4]])
b = np.array([[3, 4, 5],
[1, 2, 3]])
print(a.shape, b.shape)
# 행렬 덧셈
print(a + b)
# 행렬 뺄셈
print(a - b)
# 행렬 원소별 곱셈
print(a * b)
# 행렬 나눗셈
print(a / b)
ndarr3 = np.array([[1, 2, 3],
[1, 2, 3],
[2, 3, 4]])
ndarr4 = np.array([[1, 2],
[3, 4],
[5, 6]])
print(ndarr3.shape)
print(ndarr4.shape)
print((1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6))
print((1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6))
print((2*1 + 3*3 + 4*5), (2*2 + 3*4 + 4*6))
print(ndarr3 @ ndarr4)
# 행렬 곱셈 또는 벡터 내적을 수행
np.dot(ndarr3, ndarr4)
'AI공부 > 머신러닝' 카테고리의 다른 글
| 5. selenium을 이용한 크롤링 (1) | 2025.11.26 |
|---|---|
| 4. 공공 데이터셋 가져오기 (0) | 2025.11.26 |
| 참고) 머신러닝/딥러닝 모델별 장단점 표 (0) | 2025.11.25 |
| 3. matplot (0) | 2025.11.19 |
| 2. Pandas (1) | 2025.11.17 |