2 분 소요

Numpy 기본 사용법


Numpy란

  • 행렬이나 대규모 다차원 배열을 쉽게 처리할 수 있는 파이썬의 라이브러리이다.

  • 데이터를 다루는 작업을 할 때 크게 도움이 된다.

  • python의 List 보다 빠르고 다양한 기능을 갖고 있다.

배열 생성

python은 기본적으로 C언어와 java에서 사용하는 배열(array)을 지원하지 않는다.

list와 Array는 분명한 차이가 있는데 그 중 가장 큰 차이는 List는 동적 할당이며 Array는 정적 할당이라는 점이다.

이로 인해 Numpy로 배열을 만들어 사용한다면 속도 측면에서 이점을 챙길 수 있는 것이다.

리스트가 아닌 Numpy 배열을 생성하여 기존의 리스트로 불가능한 다양한 연산과 추가 기능을 이용 할 수 있다.

배열을 생성하는 방법은 다음과 같다.

import numpy as np

list1 = [1,2,3]
print(list1)
print(type(list1))
array = np.array(list1)
print(array)
print(type(array))

[1, 2, 3] <class ‘list’> [1 2 3] <class ‘numpy.ndarray’>

위 코드와 같이 array 함수에 매개 변수로 리스트를 넣어도 되며 직접 배열을 작성해도 무관하다.

배열 초기화

Numpy는 배열을 생성하기 위한 다양한 방법들을 제시한다.

그 중 기본적인 일부만 알아보자.

import numpy as np

# 0부터 3까지의 배열 생성
array1 = np.arange(4)
print(array1)
# 모든 익덱스의 값이 0인 2차원 배열 생성
array2 = np.zeros((3,4), dtype=int)
print(array2)
# 모든 인덱스의 값이 문자열 1인 2차원 배열 생성
array3 = np.ones((3,4), dtype=str)
print(array3)
# 0부터 9까지 랜덤하게 초기화 된 배열 생성
array4 = np.random.randint(0,10,(3,3))
print(array4)

출력결과

[0 1 2 3]

[[0 0 0 0] [0 0 0 0] [0 0 0 0]]

[[‘1’ ‘1’ ‘1’ ‘1’] [‘1’ ‘1’ ‘1’ ‘1’] [‘1’ ‘1’ ‘1’ ‘1’]]

[[0 1 1] [2 1 6] [5 7 1]]

배열의 연산

numpy를 통한 배열의 연산은 기존 List의 부족한 점을 해결해 주는 아주 강력한 무기 중 하나이다.

아래 코드를 통해 배열의 연산 결과가 어떻게 나오는지 알아보자.

import numpy as np

## 리스트 덧셈
list1 = [1,2,3]
list2 = [4,5,6]
list3= list1 + list2
print(list3)
## 배열 덧셈
arr1 = np.array(list1)
arr2 = np.array(list2)
arr3 = arr1+ arr2
print(arr3)
## 배열 덧셈 2
print(arr1+10)
## 배열 나눗셈
print(arr1/arr2)

출력결과

[1, 2, 3, 4, 5, 6]

[5 7 9]

[11 12 13]

[0.25 0.4 0.5 ]

결과를 통해 알 수 있듯이 기존 리스트의 덧셈으로는 리스트를 이어 붙이는 식의 덧셈이 된 반면 배열을 이용한다면 각 값에 연산이 되기 때문에 좀 더 편하게 연산이 가능하다.

그렇다면 배열을 list 방식의 덧셈처럼 합친다면 어떻게 해야 할지 알아보자.

import numpy as np

## 배열 합치기
arr1 = np.array([1,2,3])
arr2 = np.array([1,2,3])
arr3 = np.concatenate([arr1,arr2])
print(arr3)

출력결과

[1 2 3 4 5 6]

numpy가 제공하는 concatenate 함수를 통해 list의 덧셈처럼 배열간 합치기가 가능하다.

배열 형태 바꾸기

numpy는 배열의 형태 또한 바꿀 수 있다.

import numpy as np

## 배열 형태 바꾸기
arr1 = np.array([1,2,3,4,5,6,7,8])
arr2 = arr1.reshape((2,4))
print(arr2)
## 배열 열기준으로 나누기
left,right= np.split(arr2,[2], axis=1)
print(left)
print(right)
## reshape -1사용
## -1을 사용하게 되면 해당 부분은 자동으로 맞춰지게 된다.
arr3 = arr1.reshape(-1,4)
print(arr3)

**출력 결과 **

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

left 배열

[[1 2] [5 6]]

right 배열

[[3 4] [7 8]]

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

배열 인덱싱과 슬라이싱

numpy 배열에 python의 강력한 무기인 슬라이싱 또한 사용할 수 있다.

import numpy as np

## 배열 인덱싱
arr1 = np.array([[1,2,3,4],[5,6,7,8]])
print(arr1[0])
##2차원 배열 슬라이싱
print(arr1[1][0:4:2])
print(arr1[0:2,0:2])

**출력 결과 **

[1 2 3 4]

[5 7]

[[1 2]
 [5 6]]

배열 정렬

sort 함수를 통해 배열을 순서대로 정렬 할 수 있다.

import numpy as np

## 배열 정렬
arr1 = np.random.randint(0,100,9)
print(arr1)
arr2 = np.sort(arr1)
print(arr2)
arr3 = np.sort(arr1)[::-1]
print(arr3)

출력 결과

[78 32 57 85 20 23 76 46 32]

[20 23 32 32 46 57 76 78 85]

[85 78 76 57 46 32 32 23 20]

댓글남기기