List vs Array
데이터 타입이 한 종류이면 무조건 Nump의 ndarray()를 사용하자
Why??
1. 속도 : 파이썬의 List는 여러 가지 데이터 타입의 요소를 포함할 수 있지만, 동시에 각 요소에 대한 타입 체크와 변환하는 작업 필요
2. 메모리 오버헤드
a) List는 각 요소의 [Meta Data](타입 정보 등)과 함께 저장이 된다.
b) List는 [동적] 배열이다.
-> 배열의 size가 변하면, 기존 크기의 list를 새롭게 [복사]하여 요소를 추가해야 한다.
c) 파이썬 리스트의 인덱스 연산은 배열과는 다르게 유연하게 동작합니다.
음수 인덱스, 슬라이싱 등이 가능하지만, 이는 인덱스 연산 시에 추가적인 계산이 필요하게 만듭니다.
Conclusion : 반면에 배열은 보통 정적 타입을 갖는 언어에서 사용되며, 연속된 메모리 공간에 요소들을 저장하여 빠른 접
근을 가능하게 합니다. 또한 배열의 size가 정적으로 결정되기에 동적으로 요소를 추가할 수가 없다.
따라서 데이터 타입이 1개인 경우에는 성능과 메모리 효율성을 위해 Numpy의 배열(Array)을 사용하는 것이 좋을 수 있습
니다.
Numpy의 Array 사용법에 대해서는 아래 링크에 자세히 나와 있다.
벡터화된 연산은 Numpy의 핵심적인 특징 중 하나입니다. 이를 이해하기 위해 우선 벡터화된 연산과 일반적인 반복문에 의한 연산의 차이를 살펴보겠습니다.
- 일반적인 반복문을 사용한 연산:
import numpy as np
# 두 리스트의 각 요소를 더하는 연산
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
result = []
for i in range(len(a)):
result.append(a[i] + b[i])
print(result)
위 코드는 두 리스트의 각 요소를 더하는 연산을 수행합니다. 이러한 연산은 반복문을 사용하여 각 요소를 하나씩 접근하고 더하는 방식으로 작동합니다.
- Numpy를 사용한 벡터화된 연산:
import numpy as np
# 두 배열의 각 요소를 더하는 연산
a = np.array([1, 2, 3, 4, 5])
b = np.array([6, 7, 8, 9, 10])
result = a + b
print(result)
위 코드는 Numpy를 사용하여 두 배열의 각 요소를 더하는 연산을 수행합니다. 이 경우 배열의 요소별로 연산이 자동으로 수행되므로 반복문을 사용할 필요가 없습니다.
벡터화된 연산을 사용하면 반복문을 사용하는 것보다 코드가 간결하고 읽기 쉽습니다. 또한 Numpy의 벡터화된 연산은 내부적으로 C로 구현되어 있어 훨씬 효율적으로 실행됩니다. 이는 더 높은 수준의 최적화와 CPU의 SIMD(Single Instruction, Multiple Data) 명령을 활용하여 동작하기 때문에 일반적인 반복문에 비해 빠른 속도를 제공합니다.
'프로그래밍 언어 (プログラミング言語) > 파이썬' 카테고리의 다른 글
__getitem__()(Feat. 시퀀스(Sequence) 객체, 매핑(Mapping) 객체) (0) | 2024.04.08 |
---|---|
plt.ylim(), plt.legend(), plt.plot(Feat. Matplotlib) (0) | 2024.02.19 |
컴퓨터 비전과 딥러닝 P255(Matplotlib 관련 코드 설명) (0) | 2024.02.16 |
아나콘다(anadonda)를 사용하는 이유! (1) | 2023.12.21 |