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]
'파이썬 > 기초문법' 카테고리의 다른 글
Python ==과 is의 차이 (0) | 2020.02.12 |
---|---|
Relative imports in Python 3 (0) | 2020.02.02 |
Multiprocessing vs. Threading in Python: What Every Data Scientist Needs to Know (0) | 2020.01.30 |
Python 날짜 다루기 datetime, dateutil, timedelta (0) | 2020.01.24 |
Python self 이해하기 (2) | 2020.01.23 |
댓글