8강

정지인·2025년 6월 10일

✅ Section 01. 넘파이 소개

넘파이는 과학 계산을 위한 파이썬 핵심 라이브러리로, 고성능 다차원 배열 객체 및 다양한 수학 함수 제공

넘파이 설치 및 버전 확인

  • pip을 이용해 넘파이를 설치하고, import로 불러와 버전을 확인합니다.
# 주피터 노트북 사용자
!pip install numpy
import numpy as np
print(np.__version__)
1.26.4

✅ 2. 넘파이 배열

배열 생성 및 모양 확인

  • np.arange()로 배열을 만들고 reshape()로 형태를 바꿉니다.
d = np.arange(12).reshape(3, 4)
print(d, d.shape)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]] (3, 4)

배열의 데이터 타입 확인

  • dtype 속성으로 배열 내 데이터 형을 확인합니다.
print(d.dtype)
int64

배열의 차원 수 확인

  • ndim은 배열의 차원 수를 반환합니다.
print(d.ndim)
2

전치 (transpose)

  • T 속성은 행과 열을 바꿉니다.
print(d.T)
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

요소 개수 확인

  • 전체 요소 개수는 size로 확인합니다.
print(d.size)
12

메모리 바이트 크기 확인

  • 배열이 차지하는 메모리 바이트 수를 확인합니다.
print(d.nbytes)
96

flat으로 모든 요소 1로 변경

  • flat 속성으로 요소에 반복적으로 접근 가능합니다.
d.flat = 1
print(d)
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]

✅ 3. 넘파이 배열 생성

리스트 → 배열 변환

  • np.array()를 이용해 리스트를 넘파이 배열로 변환합니다.
mynpa1 = np.array([1, 2, 3])
print(type(mynpa1))
<class 'numpy.ndarray'>

2차원 리스트 → 배열

mylist2 = [[1, 2, 3], [4, 5, 6]]
mynpa2 = np.array(mylist2)
print(type(mynpa2))
<class 'numpy.ndarray'>

데이터프레임 → 배열

  • pandas.DataFrame 객체를 배열로 변환할 수 있습니다.
import pandas as pd
mypd1 = pd.DataFrame([1, 2, 3])
mynp1 = np.array(mypd1)
print(type(mynp1))
<class 'numpy.ndarray'>

✅ 4. n차원 넘파이 배열

1차원 배열

  • np.arange()는 연속된 수로 배열을 생성합니다.
a = np.arange(3)
print(a, type(a), a.ndim, a.shape)
[0 1 2] <class 'numpy.ndarray'> 1 (3,)

다양한 arange 사용 예

  • 인자가 많아질수록 생성 규칙이 명확해집니다.
a2 = np.arange(4)
a3 = np.arange(2, 4)
a4 = np.arange(0, 5, 2)
print(a2)
print(a3)
print(a4)
[0 1 2 3]
[2 3]
[0 2 4]

✅ 5. reshape로 배열 구조 변경

  • reshape은 배열 모양을 바꿉니다. -1은 자동 계산입니다.
a = np.arange(12)
print(a.reshape(3, 4))
print(a.reshape(-1, 6))
print(a.reshape(2, 2, 3))
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
[[[ 0  1  2]
  [ 3  4  5]]

 [[ 6  7  8]
  [ 9 10 11]]]

✅ 6. flatten으로 1차원 배열 평탄화

  • flatten()은 다차원 배열을 1차원으로 펼칩니다.
a = np.arange(12).reshape(3, 4)
print(a.flatten())
[ 0  1  2  3  4  5  6  7  8  9 10 11]

✅ 7. 배열 방향 반전

  • 행 또는 열 순서를 바꾸려면 슬라이싱을 활용합니다.
print(a[::-1])       # 행 역순
print(a[:, ::-1])    # 열 역순
print(a[::-1, ::-1]) # 전체 역순

✅ 8. transpose 전치

  • transpose() 또는 .T는 행렬을 전치합니다.
print(a.transpose())
print(a.T)
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

✅ 9. 배열 연결

  • vstack은 수직 연결, hstack은 수평 연결입니다.
a = np.arange(9).reshape(3, 3)
b = a * 2
print(np.vstack((a, b)))
print(np.hstack((a, b)))
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
[[ 0  1  2  0  2  4]
 [ 3  4  5  6  8 10]
 [ 6  7  8 12 14 16]]

✅ 10. 배열 분할

  • vsplit, hsplit, split을 이용해 배열을 나눌 수 있습니다.
a = np.arange(12).reshape(4, 3)
print(np.vsplit(a, 4))
print(np.hsplit(a.T, 3))

✅ 11. 인덱싱과 슬라이싱

  • 배열 내부 요소를 특정 조건으로 추출합니다.
a = np.arange(6)
print(a[0], a[-1], a[2:5], a[::-1])

b = np.arange(12).reshape(3, 4)
print(b[1, 2], b[:, 1], b[::2, ::2])

✅ 12. 불 인덱싱 (조건 기반 선택)

  • 조건식을 기반으로 원하는 값만 선택합니다.
a = np.array([1, 2, 3, 4, 5])
print(a[a > 2])
print(a[(a > 2) & (a < 5)])
[3 4 5]
[3 4]

✅ 13. 정렬

  • np.sort()는 정렬된 배열을 반환하며, argsort()는 인덱스를 반환합니다.
a = np.array([5, 2, 9, 1])
print(np.sort(a))
print(a.argsort())
[1 2 5 9]
[3 1 0 2]

✅ 14. 배열 간 연산

  • 배열 간 덧셈, 곱셈, 행렬곱을 수행할 수 있습니다.
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(a + b)      # 요소별 덧셈
print(a * b)      # 요소별 곱셈
print(a.dot(b))   # 행렬 곱셈
[[ 6  8]
 [10 12]]
[[ 5 12]
 [21 32]]
[[19 22]
 [43 50]]

✅ 15. 브로드캐스팅 (차원 자동 확장)

  • 다른 형태의 배열끼리도 자동으로 크기를 맞춰 연산할 수 있습니다.
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
print(a + b)
[[11 22]
 [13 24]]
profile
멋쟁이사자 13기 백엔드

0개의 댓글