Python

[Python] 파이썬 넘파이(numpy) 사용법

Let it out 2024. 2. 8. 15:16

넘파이(numpy)란?

파이썬에서는 배열 자료형을 자체적으로 제공하지 않는다.
따라서 배열을 구현한 다른 패키지를 import 해줘야 한다.
넘파이는 파이썬에서 배열을 사용하기 위한 대표적인 라이브러리다.
고차원 배열을 쉽게 만들고 사용 할 수 있다.

 

 
 
 

넘파이 VS 리스트

많은 숫자를 하나의 변수에 넣고 관리 할 때 리스트는 속도가 느려지고 메모리를 많이 차지 한다.
 
하지만 넘파이를 사용하면 적은 메모리로 많은 데이터를 빠르게 처리 할 수 있다. 그래서 넘파이를 많이 사용한다.
 
넘파이와 리스트는 활용 방법이 비슷하지만 다른 점은 아래와 같다.
 
1. 넘파이는 모든 원소가 같은 자료형이어야 한다.
 
2. 넘파이는 원소의 개수바꿀 수 없다.
 
 

넘파이 패키지 import

넘파이는 np라는 이름으로 import하는 것이 관례다.
넘파이가 없으면 numpy 패키지를 설치해 주자.
import numpy as np
 
 

1차원 배열 만들기

배열을 만드는 방법은 간단하다.
 
넘파이의 array 함수에 리스트를 넣기 만하면 배열로 변환 해준다.
import numpy as np

data = [1,2,3,4,5]
arr = np.array(data)
print(arr)
결과 : [1 2 3 4 5]
 
 

2차원 배열 만들기

2차원 배열을 만드는 방법은 2가지가 있다.
 
첫 번째 방법은 두 개의 리스트를 zip함수를 사용하여 2차원 리스트를 만든 후 넘파이의 array 함수로 2차원 배열을 만들 수 있다.
 
아래 예제는 5행 X 2열의 2차원 배열로 만들어진다.
import numpy as np

data1 = [1,2,3,4,5]
data2 = [6,7,8,9,10]

data3 = [[one, two]for one, two in zip(data1, data2)]   #zip 함수로 2차원 리스트 만들기

arr = np.array(data3)    #array 함수로 2차원 배열 만들기
print(arr)
결과 : 
[[ 1  6]
 [ 2  7]
 [ 3  8]
 [ 4  9]
 [ 5 10]]
 
 
 
두 번째 방법으로는 리스트 data1, data2를 바로 array  함수에  넣는 방법이다.
 
이 방법은 위와 다르게 2행 X 5열의 2차원 배열로 만들어진다.
import numpy as np

data1 = [1,2,3,4,5]
data2 = [6,7,8,9,10]

arr = np.array([data1, data2])
print(arr)
결과 : 
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
 
 
 

배열 차원과 크기 알아내기

ndim 속성으로 배열이 몇 차원인지, shape 속성으로 배열의 크기를 알 수 있다.
 
1차원 배열의 차원과 크기를 알아보는 예제다.
import numpy as np

data = [1,2,3,4,5]

arr = np.array(data)
print(arr.ndim)
print(arr.shape)
결과 : 
1
(5,)
 
 

 

2차원 배열의 크기는 아래와 같다.
import numpy as np

data1 = [1,2,3,4,5]
data2 = [6,7,8,9,10]

arr = np.array([data1, data2])
print(arr.ndim)
print(arr.shape)
결과 : 
2
(2, 5)
 
 
 

넘파이 배열 인덱싱

넘파이의 인덱싱은 리스트와 똑같이 하면된다.
import numpy as np

data = [1,2,3,4,5]

arr = np.array(data)
print(arr[2])
print(arr[-1])
결과 : 
3
5
 
 
 

넘파이 배열 슬라이싱

넘파이 배열 슬라이싱 또한 리스트와 똑같이 하면된다.
 
1차원 배열 슬라이싱 예제다.
 
슬라이싱 할 때 마지막 원소 지정 시 직전 원소까지만 출력 하는 것을 기억하자.
import numpy as np

data = [1,2,3,4,5]

arr = np.array(data)
print(arr[1:])
print(arr[1:4]) #마지막 원소는 직전까지만 출력
결과 :
[2 3 4 5]
[2 3 4]
 
 
 
2차원 배열 슬라이싱 예제다.
 
에제에 나와있는 것 처럼 행 뿐만 아니라 특정 열도 출력이 가능하다.
import numpy as np

data1 = [1,2,3,4,5]
data2 = [6,7,8,9,10]

arr = np.array([data1, data2])
print("첫 번째 행만 : ", arr[0,:])
print("두 번째 열만 : ", arr[:, 1])
결과 : 
첫 번째 행만 :  [1 2 3 4 5]
두 번째 열만 :  [2 7]
 

 

 

 

0부터 N까지 1씩 증가하는 배열 만들기

arange 함수를 사용하면 0 ~ N까지 배열을 손쉽게 만들 수 있다.
import numpy as np

arr = np.arange(10)

print(arr)
결과 : [0 1 2 3 4 5 6 7 8 9]
 
 
 

random 패키지로 숫자 섞기

넘파이 패키지에 포함되어 있는 random 패키지를 사용하여 숫자를 랜덤으로 섞을 수 있다.

0 ~ 9까지의 원소가 무작위로 shuffle하는 예제다.
import numpy as np

arr = np.arange(10)
np.random.shuffle(arr)
print(arr)
결과 : [3 5 1 6 9 2 4 8 0 7]
 

 

 
random 패키지의 shuffle 함수를 사용하면 프로그램을 재시작 할 때마다 새로운 배열의 값이 나온다.
만약에 프로그램 재 시작 마다 값을 고정 시키고 싶으면 seed함수의 매개변수를 42로 지정해 주면 된다.
seed함수의 매개변수를 42로 지정해주면 프로그램을 계속 재시작 해도 [8 1 5 0 7 2 9 4 3 6]로 값이 고정 된다.
import numpy as np

np.random.seed(42)      #shuffle 값 고정
arr = np.arange(10)
np.random.shuffle(arr)
print(arr)
결과 : [8 1 5 0 7 2 9 4 3 6]
 
 

 

반응형