본문 바로가기
파이썬/기초문법

Python NumPy 배열 기초

by 행복론자 2020. 1. 24.

Python은 다른 언어들이 흔히 가지고 있는 Array라는 기본 자료형을 제공하지 않습니다.

물론 list가 배열의 역할을 수행할 수 있고 동적으로 크기도 늘일 수 있다는 장점도 있지만 

배열에 비해서는 속도가 느리고 메모리를 많이 차지한다는 단점도 있습니다. 

 

이는 곧 배열의 장점으로

원소의 수를 바꿀 수 없도록 하고 list와 달리 같은 자료형만 사용할 수 있도록 하여 

연산/접근에 속도가 빠릅니다. 

 

Python에서는 자체적으로 배열 자료형을 제공하지 않기에 

배열을 사용하려면 따로 배열을 구현한 Numpy 패키지를 사용해야합니다. 

 

그럼 Numpy를 import하여 배열을 만들어 보겠습니다.

import numpy as np

my_arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(my_arr) # [ 0  1  2  3  4  5  6  7  8  9 10]
print(type(my_arr)) # <class 'numpy.ndarray'>

 

 

배열을 만드는 과정에서 list를 사용하였습니다.

얼핏보면 list와 비슷하지만 type부터 list와 array라는 차이점을 보입니다.

import numpy as np

src_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
my_arr = np.array(src_list)

print(type(src_list)) # <class 'list'>
print(type(my_arr)) # <class 'numpy.ndarray'>

 

 

우선 위에서 언급했듯이 배열은 모든 원소가 같은 자료형을 가져야 합니다.

따라서 아래와 같이 src_list가 주어지면

np.array를 통해 만들어지는 my_arr은 원소를 모두 같은 타입으로 맞춘다는 것을 알 수 있습니다. 

import numpy as np

src_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '10']
my_arr = np.array(src_list)

print(src_list) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '10']
print(my_arr) #  ['0' '1' '2' '3' '4' '5' '6' '7' '8' '9' '10']

 

 

Numpy 연산

이렇게 만들어진 배열은 한 번의 연산으로 계산이 가능합니다.

무슨 말이냐면 list의 원소들에 곱하기를 2를 해보겠습니다.

import numpy as np

src_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(src_list * 2) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

 

이렇게 하면 안되죠 길이가 2배로 늘어납니다. 

하지만 배열은 이 연산을 통해 원소들에 각 2배씩 곱할 수 있습니다.

import numpy as np

src_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
my_arr = np.array(src_list)

print(my_arr * 2) #[ 0  2  4  6  8 10 12 14 16 18 20] 

 

 

이번에는 list와 Array끼리의 (+)연산을 해보겠습니다.

import numpy as np

list1 = [1, 2, 3]
list2 = [4, 5, 6]

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

print(list1 + list2) # [1, 2, 3, 4, 5, 6]
print(arr1 + arr2) # [5 7 9]

 

 

list끼리는 합쳐지는 반면 Array끼리는 연산을 합니다.

(여기서 arr1과 arr2의 길이가 맞지 않으면 연산이 되질  않습니다)

 

 

다음은 논리 연산입니다.

위에서 arr1에 대해 arr1 > 1라는 연산을 수행하면

arr1 원소중 1보다 큰지 확인해 boolean type으로 담은 Array가 생깁니다. 

 

마찬가지로 arr1 == 2 라는 연산은 arr1의 원소들을 모두 2인지 확인해 결과를 Array 담습니다,

import numpy as np

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

temp1 = arr1 == 2
temp2 = arr1 > 1

print(temp1) # [False  True False]
print(temp2) # [False  True  True]
반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글