밤하늘공작소
Python 리스트 Numpy 리스트 차이점 본문
numpy란 뉴머리컬 파이썬(numerical python)의 줄임말로 숫자와 관련한 계산 작업을 편하게 해 줄 도구입니다. python은 원래 숫자 계산을 하기 위해 만들어지지 않았고, 그런 것을 하기 위해 더 많은 코드를 써야 했었습니다. 그래서 numpy가 python으로 숫자 계산을 할 때 적은 코드로 효율적이게 실행시키기 위해 만들어졌습니다. numpy는 numpy 배열이라는 것을 제공해서 2차원 배열이나 많은 수학적 계산을 해야 할 때 유용하게 쓰입니다.
그렇다면 이것이 일반 python 리스트와 무엇이 다를까요? 사실 이 두개는 여러 값을 리스트로 보관하기 때문에 같은 점이 많습니다. 하지만, 다른 점이 있습니다.
1. 선언 방식
우선 선언을 할 때의 차이가 있습니다. numpy 리스트는 자료형을 통합시켜 값을 집어넣어야 합니다. 만약 숫자, 문자형의 값을 넣는다면 숫자도 문자형으로 바뀝니다. 다만 python 리스트는 자료형이 다른 것을 허용합니다.
또 numpy 리스트는 리스트 안에 리스트를 넣는 2차원 리스트를 만들 때 모든 리스트의 길이가 같아야 합니다. 반면 python 리스트는 꼭 같은 길이의 리스트를 넣을 필요는 없습니다.
2. 문법의 차이
두개의 numpy 리스트와 두 개의 python 리스트를 각각 더하는 코드가 있습니다.
import numpy as np
# numpy 리스트
numpy_list1 = np.array([1, 2, 3, 4, 5])
numpy_list2 = np.array([6, 7, 8, 9, 10])
print(numpy_list1 + numpy_list2)
# python 리스트
python_list1 = [1, 2, 3, 4, 5]
python_list2 = [6, 7, 8, 9, 10]
print(python_list1 + python_list2)
[ 7 9 11 13 15]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
이 코드를 보면 numpy 리스트는 서로 더하면 리스트의 인덱스들이 값들이 합쳐진 새로운 인덱스가 생깁니다. 그 인덱스들의 리스트가 만들어집니다. 반면 python은 두 리스트를 붙인 새로운 리스트가 만들어집니다. 만약 일반 python 리스트로 numpy 리스트와 같은 문법을 만들려면 반복문을 돌리며 여러 가지 작업을 했어야 할 것입니다.
numpy 리스트는 이와 같이 뺄셈은 각 인덱스들의 값의 차를 새로운 인덱스로 만들고, 곱셈은 각 인덱스들의 값의 곱을 새로운 인덱스로 만들고, 나눗셈은 각 인덱스들의 값의 몫을 새로운 인덱스로 만듭니다. 하지만, python 리스트는 모두 지원하지 않습니다.
이것은 numpy 리스트와 python 리스트에 숫로 연산하는 코드입니다. (에러가 나는 코드 제거)
import numpy as np
# numpy 리스트
numpy_list = np.array([3, 6, 9, 12, 15])
print(numpy_list + 3)
print(numpy_list - 3)
print(numpy_list * 3)
print(numpy_list / 3)
print()
# python 리스트
python_list = [1, 2, 3, 4, 5]
print(python_list * 3)
[ 6 9 12 15 18]
[ 0 3 6 9 12]
[ 9 18 27 36 45]
[1. 2. 3. 4. 5.]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
리스트에 숫자를 연산할 때 numpy 리스트에서는 숫자로 어떤 연산을 해도 그 값이 각 인덱스에 하나하나에 적용됩니다. 하지만 python 리스트의 경우는 더하기, 뺄셈과 나눗셈은 지원하기 않고 곱셈은 값을 3번씩 반복합니다.
이외에도 더 많은 문법 차이가 있겠지만, 연산을 할 때를 중심으로 적었습니다.
3. 성능 차이
성능의 차이도 있습니다. numpy 리스트는 많은 데이터를 효율적으로 다루기 위해 만들어진 만큼 빠릅니다. 위에서도 말했듯이 numpy 리스트에는 하나의 자료형을 가진 값들 밖에 넣지 못합니다. 하지만, 그만큼 성능은 python 리스트보다 빠릅니다. python 리스트는 여러 가지 자료형의 값들을 저장할 수 있지만, 그만큼 연산 친화적이지 않아 속도가 느립니다.
그렇다면 여러분은 어떤 리스트를 써야할까요? 이것은 당연히 상황에 따라서 다릅니다. 그저 값을 간단히 넣고 빼는 일을 하고, 그것을 가지고 복잡한 연산을 하지 않을 것이라면 굳이 numpy 리스트를 사용할 필요는 없습니다. 하지만, 리스트 안에 값으로 연산을 하게 되거나 2차원 리스트 즉 리스트 안에 여러 리스트를 넣게 될 것이면 numpy 리스트를 사용하는 것이 유리합니다.
'코딩 > Python' 카테고리의 다른 글
Pandas란? (2) | 2022.10.28 |
---|---|
numpy 리스트 만드는 방법 (0) | 2022.10.26 |
Python에서 문자 자르기 (0) | 2022.07.22 |
Python 리스트 활용 팁 (6) | 2022.07.11 |
Python에서 포맷팅하기 (0) | 2022.06.28 |