python

[번역] 왜 NumPy는 빠를까요?

게으른 the lazy 2021. 4. 2. 13:48

본 글은 요약본입니다. 전문은 여기를 클릭!

 

NumPy가 리스트보다 빠른 이유는?

1. 원소의 타입

Array의 원소로 정수 하나를 저장하려고 합니다. NumPy array의 경우 정수는 내장 자료형인 int로 저장되지 않습니다. 대신 binary로 변환 후 int32(4 byte)로 캐스팅 되어 저장됩니다. 숫자가 작아서 1 byte만 필요하다면 1 byte로 변환도 할 수 있습니다. 이 경우에는 정수 하나를 저장하는 데에 딱 1 byte만 필요하겠죠.

반면 리스트에 들어가는 정수는 내장 자료형 int 타입으로 저장됩니다. 이 int 타입 하나를 저장하려면 다음 것들이 모두 필요합니다.

    1) Size (4 byte)
    2) Reference Count (8 byte)
    3) Object Type (8 byte)
    4) Object Value (8 byte)
즉, 정수 하나를 저장하기 위해 28 byte를 씁니다.

2. 타입 체킹

리스트의 원소는 타입을 가리지 않습니다. 따라서 컴파일러는 리스트에서 원소를 꺼내올 때 타입을 확인해야 하겠죠. 반면 NumPy는 모든 원소가 같은 타입이므로 이 과정을 생략할 수 있습니다.

 

3. 값이 저장되는 메모리 위치의 연속성

NumPy array의 원소들은 메모리 상의 연속된 위치에 저장됩니다. 리스트는 각 원소에 대한 reference만을 저장하는 것이므로 메모리 상 위치가 연속적이지 않습니다.

 

 

게으른 파이썬