티스토리 뷰
1 . 선언 조건
리스트는 숫자형, 문자열 등 모든 자료를 타입을 보존하여 가질 수 있습니다.
(여러 가지 자료형 허용)
반면, 넘파이 어레이는 숫자형과 문자열이 섞이면 모두 문자열로 전환됩니다.
(한 가지 자료형만 허용)
import numpy as np
a = [1, 3, 5, 'a', 'b'] # 1, 3, 5는 숫자형, 'a', 'b'는 문자열
b = np.array([1, 3, 5, 'a', 'b']) # '1', '3', '5', 'a', 'b'의 문자열로 전환
2차원 이상의 배열 구조에서 리스트는 내부 배열에서 원소 개수가 달라도 됩니다.
그러나, 넘파이 어레이는 내부 배열 내 원소 개수가 모두 같아야 합니다.
a = [[1], [3, 5], [2, 4, 6]] # 문제 X
b = np.array([[1], [3, 5], [2, 4, 6]]) # 개수가 달라서 array 선언 불가능
# array([list([1]), list([3, 5]), list([2, 4, 6])], dtype=object)
2 .연산
python list는 덧셈 시 항목을 이어 붙이는 concatenate를 수행합니다.
또한, 리스트 간의 다른 연산은 허용하지 않습니다.
곱셈은 자연수 곱셈은 가능하며, 원소 복사를 의미합니다.
numpy array는 덧셈 시 항목 간 덧셈을 수행하며,
이는 다른 사칙연산도 마찬가지 입니다.
또한, 실수에 대한 사칙연산 과정도 원소 전체의 값에 대하여 수행이 가능합니다.
# 리스트 연산
a = [1, 3, 5]
b = [2, 4, 6]
a + b # [1, 3, 5, 2, 4, 6]
# 허용하지 않음 : a - b, a * b, a / b
a * 3 # [1, 3, 5, 1, 3, 5, 1, 3, 5]
# 넘파이 어레이 연산
a = np.array([1, 3, 5])
b = np.array([2, 4, 6])
a + b # array([ 3, 7, 11])
a * b # array([ 2, 12, 30])
a + 2 # array([3, 5, 7])
a * 3 # array([ 3, 9, 15])
3 .메소드
자료형 종류가 다르기때문에 자료형에서 지원하는 메소드의 종류도
당연히 다릅니다.
예를 들어, 리스트에서는 mean, argmax, round 등 어레이 메소드를 지원하지 않고,
어레이에서는 append, remove, extend 등 리스트 메소드를 지원하지 않습니다.
두 자료형의 자세한 메소드의 종류는 여기서 다루지는 않겠습니다.
a = [1, 3, 5]
b = np.array([1, 3, 5])
# 리스트 메소드(b.append(7) 등은 불가능)
a.append(7)
a.extend([9])
a.remove(9)
# 어레이 메소드(a.mean() 등은 불가능)
b.mean()
b.argmax()
b.round()
4 .연산 속도
같은 연산을 수행하는 경우, 일반적으로
numpy array가 연산 최적화가 더 잘 되어있습니다.
import time
# 리스트 연산 속도
a = list(range(10 ** 8))
start = time.time()
for i in range(10 ** 8):
a[i] *= 2
end = time.time()
print(end - start) # 약 17.35초
# 어레이 연산 속도
a = np.array(range(10 ** 8))
start = time.time()
a = a * 2
end = time.time()
print(end - start) # 약 1.35초
1억개의 원소에 값을 전부 2배로 곱하는 연산을 수행한 경우,
numpy array에서의 연산이 약 10배 이상 빨랐습니다.
'프로그래밍 > Python' 카테고리의 다른 글
(Python) 문자열 뒤집기, 문자열 거꾸로 출력 (0) | 2022.09.07 |
---|---|
백준 1978 소수 찾기 (파이썬) (0) | 2022.09.06 |
백준 1408 24 (파이썬) (0) | 2022.09.01 |
[Jupyter Notebook] 주요 단축키 모음 (0) | 2022.08.25 |
백준 11557 Yangjojang of The Year(파이썬) (0) | 2022.08.22 |