넘파이는 과학 계산을 위한 파이썬 핵심 라이브러리로, 고성능 다차원 배열 객체 및 다양한 수학 함수 제공
pip을 이용해 넘파이를 설치하고, import로 불러와 버전을 확인합니다.# 주피터 노트북 사용자
!pip install numpy
import numpy as np
print(np.__version__)
1.26.4
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
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 속성으로 요소에 반복적으로 접근 가능합니다.d.flat = 1
print(d)
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
np.array()를 이용해 리스트를 넘파이 배열로 변환합니다.mynpa1 = np.array([1, 2, 3])
print(type(mynpa1))
<class 'numpy.ndarray'>
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'>
np.arange()는 연속된 수로 배열을 생성합니다.a = np.arange(3)
print(a, type(a), a.ndim, a.shape)
[0 1 2] <class 'numpy.ndarray'> 1 (3,)
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]
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]]]
flatten()은 다차원 배열을 1차원으로 펼칩니다.a = np.arange(12).reshape(3, 4)
print(a.flatten())
[ 0 1 2 3 4 5 6 7 8 9 10 11]
print(a[::-1]) # 행 역순
print(a[:, ::-1]) # 열 역순
print(a[::-1, ::-1]) # 전체 역순
transpose() 또는 .T는 행렬을 전치합니다.print(a.transpose())
print(a.T)
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
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]]
vsplit, hsplit, split을 이용해 배열을 나눌 수 있습니다.a = np.arange(12).reshape(4, 3)
print(np.vsplit(a, 4))
print(np.hsplit(a.T, 3))
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])
a = np.array([1, 2, 3, 4, 5])
print(a[a > 2])
print(a[(a > 2) & (a < 5)])
[3 4 5]
[3 4]
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]
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]]
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
print(a + b)
[[11 22]
[13 24]]