본문 바로가기
파이썬 독학

파이썬 넘파이 Numpy 사용법 가이드

by 데싸루나 2023. 2. 20.

파이썬 넘파이(Numpy)는 "Numerical Python"이라는 뜻으로 파이썬으로 수학, 통계, 숫자들을 편리하게 다루도록 도와주는 라이브러리입니다. 넘파이(Numpy)는 데이터 분석과 머신러닝 등에 널리 활용되고 있습니다. 이 포스팅에서는 넘파이의 기본 개념과 사용법에 대해 상세하게 알아보겠습니다.

 

파이썬-넘파이-Numpy-가이드-사용방법
파이썬-넘파이-Numpy-가이드-사용방법

넘파이(Numpy)를 사용해야하는 이유 (유용한 점, 장점)

1. 속도: 넘파이(Numpy)는 숫자 계산과 벡터 오퍼레이션을 빠르게 할 수 있도록 최적화되어 있습니다. 그렇기 때문에 많은 양의 숫자들을 다뤄야 할 때 유용하게 사용할 수 있습니다. 기본 파이썬 배열(array) 보다 훨씬 빠른 속도로 처리가 가능합니다. 

 

2. 폭넓은 사용성: 넘파이(Numpy)는 선형대수(linear algebra)나 랜덤한 숫자 생성기, 푸리에 변환(Fourier transform) 같은 복잡한 숫자 계산을 지원하는 다양한 모듈을 제공함으로써 사용자가 복잡한 코딩을 직접 하지 않아도 되도록 지원합니다. 

 

3. 사용하기 쉬움 : 넘파이는 간단하고 직관적인 인터페이스를 제공함으로써 사용자가 손쉽게 사용할 수 있도록 설계되어 있습니다. 또한 복잡한 계산들도 코딩을 최소화하고 모듈화함으로써 복잡한 데이터들도 분석을 쉽게 할 수 있도록 도와줍니다. 

 

4. 다른 라이브러리들과 호환이 좋음 : 데이터 분석과 머신러닝에 필수적인 Pandas, Scikit-learn, Tensorflow, Pytorch 등과 같은 라이브러리들은 넘파이(Numpy)를 기반으로 설계가 되어있습니다. 그렇기 때문에 넘파이를 제대로 활용할 줄 알게 되면, 다른 라이브러리 활용도도 함께 올라가게 됩니다. 

 

 

넘파이 Numpy 설치 방법

넘파이를 설치하기 위해서는 다음의 pip커맨드를 이용하면 됩니다. conda의 경우는 아래에 있는 커맨드를 이용하시면 됩니다. 구글 코랩을 사용하시는 경우는 별도의 설치가 불필요합니다. 

pip install numpy
conda install numpy

 

Numpy Array란? (넘파이 배열) 

넘파이 배열(Array)에는 여러가지 종류가 있습니다. 주로 사용하는 Array 종류에 대해 알아보겠습니다. 

1. 1차원 배열(Array) 또는 벡터(Vector): 1차원만 가지는 배열로, 벡터(Vector)라고도 부릅니다. 1차원 array는 데이터 시퀀스나, 타임 시리즈 데이터 또는 숫자로 이루어진 리스트를 다룰 때 유용하게 사용할 수 있습니다. 

2. 2차원 배열(Array) 또는 Matrix : 2차원으로 이루어진 array로 매트릭스라고도 부릅니다. 이는 테이블이나 그리드형태로 이루어진 데이터나 이미지 같은 데이터를 처리할 때 유용하게 사용할 수 있습니다. 

3. 다차원 배열(Multi-dimensional array) : 넘파이 Array는 2차원 이상의 어떤 차원도 가질 수 있습니다. 그렇기 때문에 복잡한 데이터들을 처리하는 게 가능합니다. 

 

 

넘파이 배열(Numpy Array) 생성하는 방법

리스트(list)를 활용하여 Numpy Array (넘파이 배열)을 생성하는 방법

1. 1차원 배열(Array) : 1차원 array를 생성하기 위해서는 numpy.array() 함수를 이용할 수 있습니다. 다음은 리스트로 이루어진 값을 argument로 받아서 넘파이 array를 생성해 주는 코드입니다. 

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(a)

Output:[1 2 3 4 5]

 

2. 2차원 배열(Array) : 2차원 배열도 마찬가지로 numpy.array() 함수를 이용하여, list of list 를 argument로 넘겨줌으로써 생성할 수 있습니다. 

import numpy as np

b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(b)

Output:
[[1 2 3]
 [4 5 6]
 [7 8 9]]

 

3. 다차원 배열(Multi-dimensional array) :다차원 배열도 2차원 배열처럼, 다차원의 list of list를 numpy.array()함수의 argument로 넘겨주어 생성할 수 있습니다. 

import numpy as np

c = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(c)

Output:
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]

 

 

Built-in 메소드를 이용하여 넘파이 배열(Numpy Array)을 생성하는 방법

1. numpy.zeros() : 0으로 채워진 넘파이 배열(Numpy Array) 생성하는 함수입니다.

import numpy as np

a = np.zeros((3, 4))  # creates a 3x4 array filled with zeros
print(a)

Output:
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

 

2. numpy.ones() : 1로 채워진 넘파이 배열(Numpy Array) 생성하는 함수입니다.

import numpy as np

b = np.ones((2, 3))  # creates a 2x3 array filled with ones
print(b)


Output:
[[1. 1. 1.]
 [1. 1. 1.]]

 

3. numpy.arrange() : 첫번째 argument는 start, 두 번째 argument는 stop, 세 번째 argument는 step(얼마씩 증가할 건지)을 나타냅니다. 만약 argument를 하나만 주면, 해당값은 stop으로 보고 0부터 stop-1까지 1 차이만큼 숫자를 넣어 넘파이 배열을 만듭니다. 

import numpy as np

c = np.arange(10)  # creates a 1D array of values from 0 to 9
print(c)

d = np.arange(2, 10, 2)  # creates a 1D array of values from 2 to 8 with a step of 2
print(d)


Outout:
[0 1 2 3 4 5 6 7 8 9]

[2 4 6 8]

 

4. numpy.random.rand() : 0과 1사이에 주어진 사이즈의 넘파이 array를 만드는 함수입니다.

import numpy as np

e = np.random.rand(2, 3)  # creates a 2x3 array of random numbers between 0 and 1
print(e)


Outout:
[[0.68813563 0.34739787 0.61791562]
 [0.61122345 0.10130204 0.76628478]]

 

 

5. numpy.random.randn() : 0 주변에 정규분포가 형성되도록 주어진 사이즈의 넘파이 array를 만드는 함수입니다. 

import numpy as np

e = np.random.randn(2, 3)  # creates a 2x3 array of random numbers araoun 0 (normal distribution)
print(e)


Output:
[[ 0.28455175  1.12810574 -0.10206758]
 [ 0.23920506 -0.11442015  0.10781213]]

 

6. numpy.lindspace() : 주어진 숫자 사이에 주어진 개수만큼의 똑같은 인터벌을 가진 넘파이 array를 만드는 함수입니다.

import numpy as np

f = np.linspace(0, 1, 5)  # creates a 1D array of 5 evenly spaced values from 0 to 1
print(f)


Output:
[0.   0.25 0.5  0.75 1.  ]

 

7. numpy.random.randint() : 주어진 숫자 사이에 주어진 갯수 만큼의 랜덤 한 정수를 생성하여 넘파이 array를 만드는 함수입니다.

c = np.random.randint(1,30)
print(c)
c = np.random.randint(1,30,5)
print(c)

Output:
25
[26  5 18  4  3]

 

 

넘파이 배열(Numpy Array) 인덱싱(Indexing) 및 Slicing 하는 방법

1. 1차원 배열(Array) 

arr = np.array([1, 2, 3, 4])
print(arr[0])

Output:
1
arr = np.array([1, 2, 3, 4])
print(arr[1:3])

Output:
[2 3]

2. 다차원 배열(Array) 

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[0, 1]) 

Output:
2
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[:2, 1:])

Output:
[[2, 3], [5, 6]]

3. Boolean indexing 하는 방법

arr = np.array([1, 2, 3, 4])
mask = arr > 2
print(arr[mask]) 

Output:
prints [3, 4]

넘파이 배열(Numpy Array) 알아두면 유용한 응용 함수

1. 행열 변환하기 (Transposing an array) 

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.T)

Output:
array([[1, 4],
[2, 5],
[3, 6]])

 

2. Reshape 하기 (Resahping an array)

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)

Output:
[[1 2 3]
 [4 5 6]]

 

 

3. 넘파이 배열 합치기 (Conbining numpy arrays)

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
concatenated_arr = np.concatenate((arr1, arr2), axis=0)
print(concatenated_arr)

Output:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

 

4. 넘파이 배열 나누기 (Splitting numpy arrays)

arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
subarrays = np.split(arr, 2)
print(subarrays)

Output:
[array([[1, 2],
       [3, 4]]), array([[5, 6],
       [7, 8]])]

 

5. 넘파이 배열(Numpy Array)에서 최대값과 최솟값 또는 최댓값과 최솟값을 가지는 위치 찾기

arr1 = np.array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
print(arr1.max())#최대값 출력
print(arr1.min()) #최소값 출력
print(arr1.argmax()) #최대값의 위치(index) 출력
print(arr1.argmin()) #최소값의 위치(index) 출력

Output:
19
10
9
0

넘파이 Array Operation 하는 방법

1. Elementwise operation

arr1 = np.array([1, 2, 3])
arr2 = np.array([2, 3, 4])
print(arr1 + arr2)  
print(arr1 * arr2) 

Output:
[3, 5, 7]
[2, 6, 12]

 

2. Matrix operation

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
print(np.dot(arr1, arr2))

Output:
[[19 22]
 [43 50]]

넘파이 Scalar Operation 하는 방법

1. 숫자 더하기

arr = np.array([1, 2, 3])
result = arr + 2
print(result)

Output:
[3 4 5]

 

2. 숫자 나누기

arr = np.array([2, 4, 6])
result = arr / 2
print(result)

Output:
[1.0, 2.0, 3.0]

 

3. power 적용하기 (아래 예제는 제곱하는 방법)

arr = np.array([1, 2, 3])
result = arr ** 2
print(result)

Output:
[1, 4, 9]

 

Summary

데이터 분석 및 머신러닝을 위해 필수적으로 알아야하는 파이썬 라이브러리 넘파이(Numpy)에 대해 설치하는 방법부터, 생성하는 방법과 여러 가지 유용한 함수 사용법에 대해 코드 예제와 함께 알아보았습니다. 여기 있는 코드들은 직접 실행을 해보시면 더욱 이해하기 쉽고 기억하는 데 도움이 될 것입니다. 알면 알수록 쉽고 유용한 넘파이 잘 사용하시어 데이터 분석 효율을 끌어올려보세요. : )

 

<참고하면 좋을 포스팅>

 

 

파이썬 Matplotlib 사용법 가이드

Matplotlib은 파이썬에서 그래프와 차트 등의 시각화 자료를 그리는 것을 쉽게 할 수 있도록 도와주는 라이브러리입니다. Matplotlib 설치방법과 Line Plot, Bar Plot, Scatter Plot, Histogram, Pie Chart, Area Chart 그

datasciencediary.tistory.com

 

댓글