programing

일반 Python 목록에 비해 NumPy의 장점은 무엇입니까?

newsource 2022. 10. 6. 22:01

일반 Python 목록에 비해 NumPy의 장점은 무엇입니까?

일반 Python 목록에 비해 NumPy의 장점은 무엇입니까?

저는 약 100개의 금융 시장 시리즈를 가지고 있으며, 100x100x100=100만 셀의 큐브 배열을 만들 예정입니다.각 x를 각각 y와 z로 회귀시켜 배열에 표준 오차를 채웁니다.

"대형 매트릭스"의 경우 성능과 확장성을 위해 Python 목록이 아닌 NumPy를 사용해야 한다고 들었습니다.문제는 파이썬 목록을 알고 있는데 그게 나한테 효과가 있는 것 같아.

NumPy로 옮기면 어떤 혜택이 있나요?

1000시리즈(즉, 큐브에 10억개의 부동소수점 셀)가 있는 경우는 어떻게 해야 합니까?

NumPy의 배열은 Python의 목록보다 더 콤팩트합니다.Python의 경우 리스트는 적어도 20MB가 소요되지만, 단정도 플로팅된 NumPy 3D 배열은 4MB가 소요됩니다.NumPy를 사용하면 읽기 및 쓰기 항목 접근도 빨라집니다.

셀 100만 개에는 별로 관심이 없을지도 모르지만, 10억 개에는 확실히 관심이 없습니다.어느쪽도 32비트 아키텍처에는 적합하지 않습니다.64비트 빌드로 NumPy는 4GB 정도만 사용해도 Python은 적어도 12GB(크기가 2배인 포인터 다량)의 하드웨어가 필요합니다.

차이는 주로 "간접성"에 기인합니다. Python 목록은 Python 오브젝트에 대한 포인터 배열입니다. Python 오브젝트당 최소 4바이트와 가장 작은 Python 오브젝트(타입 포인터의 경우 4, 참조 카운트의 경우 4, 값의 경우 4), 메모리 할당자는 최대 16바이트까지 반올림합니다.NumPy 배열은 균일한 값의 배열입니다.단정밀 번호는 각각 4바이트, 2정밀 번호는 8바이트입니다.유연성은 떨어지지만 표준 Python 목록의 유연성에 상당한 비용을 지불해야 합니다.

NumPy는 더 효율적일 뿐만 아니라 더 편리합니다.많은 벡터 연산과 행렬 연산이 무료로 제공되므로 불필요한 작업을 피할 수 있습니다.또한 효율적으로 구현됩니다.

예를 들어 파일에서 배열로 직접 큐브를 읽을 수 있습니다.

x = numpy.fromfile(file=open("data"), dtype=float).reshape((100, 100, 100))

두 번째 차원을 따라 합산:

s = x.sum(axis=1)

임계값을 초과하는 셀을 검색합니다.

(x > 0.5).nonzero()

세 번째 치수를 따라 모든 짝수 색인 슬라이스를 제거합니다.

x[:, :, ::2]

또한 많은 유용한 라이브러리가 NumPy 배열과 함께 작동합니다.예를 들어 통계 분석 및 시각화 라이브러리입니다.

성능 문제가 없더라도 NumPy를 배우는 것은 노력할 가치가 있습니다.

Alex는 메모리의 효율을, Roberto는 편리함을 언급하고 있습니다.이것들은 모두 좋은 점입니다.몇 가지 아이디어에 대해서는 속도와 기능에 대해 설명하겠습니다.

기능:NumPy, FFT, 컨볼루션, 고속 검색, 기본 통계, 선형 대수, 히스토그램 등을 통해 많은 것을 얻을 수 있습니다.FFT 없이 살 수 있는 사람이 있을까요?

속도: 다음은 목록과 NumPy 배열의 합계를 계산하는 테스트입니다. NumPy 배열의 합계가 10배 더 빠르다는 것을 보여줍니다(이 테스트에서는 주행 거리가 다를 수 있습니다).

from numpy import arange
from timeit import Timer

Nelements = 10000
Ntimeits = 10000

x = arange(Nelements)
y = range(Nelements)

t_numpy = Timer("x.sum()", "from __main__ import x")
t_list = Timer("sum(y)", "from __main__ import y")
print("numpy: %.3e" % (t_numpy.timeit(Ntimeits)/Ntimeits,))
print("list:  %.3e" % (t_list.timeit(Ntimeits)/Ntimeits,))

(백업 실행 중) 시스템에서 다음 기능을 제공합니다.

numpy: 3.004e-05
list:  5.363e-04

다음은 scipy.org 웹사이트에 있는 FAQ의 좋은 답변입니다.

NumPy 어레이는 Python 목록에 비해 어떤 이점을 제공합니까?

Python의 목록은 효율적인 범용 컨테이너입니다.효율적인 삽입, 삭제, 추가, 연결을 지원하며 Python의 목록 통합으로 구축 및 조작이 용이합니다.단, 이들은 요소별 덧셈 및 곱셈과 같은 "벡터화된" 작업을 지원하지 않으며, 서로 다른 유형의 개체를 포함할 수 있다는 것은 Python이 모든 요소에 대한 유형 정보를 저장해야 하며 각 요소에서 작동할 때 유형 디스패치 코드를 실행해야 한다는 것을 의미합니다.이것은 또한 효율적인 C 루프에 의해 수행될 수 있는 목록 작업이 매우 적다는 것을 의미하며, 각 반복에는 유형 검사 및 기타 Python API 부킹이 필요합니다.

모두 numpy 어레이와 python 목록 간의 거의 모든 주요 차이점을 강조했습니다.여기서 간단히 설명하겠습니다.

  1. numpy 배열은 파이썬 목록(동적으로 증가할 수 있음)과 달리 생성 시 크기가 고정되어 있습니다.ndarray 크기를 변경하면 새 어레이가 생성되고 원본 어레이가 삭제됩니다.

  2. Numpy 어레이의 요소는 모두 같은 데이터 타입이어야 합니다(이종 타입도 가능하지만 수학적 연산을 할 수 없습니다).따라서 메모리 크기는 동일합니다.

  3. Numpy arrays are facilitated advances mathematical and other types of operations on large numbers of data. Typically such operations are executed more efficiently and with less code than is possible using pythons build in sequences

The standard mutable multielement container in Python is the list. Because of Python's dynamic typing, we can even create heterogeneous list. To allow these flexible types, each item in the list must contain its own type info, reference count, and other information. That is, each item is a complete Python object. In the special case that all variables are of the same type, much of this information is redundant; it can be much more efficient to store data in a fixed-type array (NumPy-style). Fixed-type NumPy-style arrays lack this flexibility, but are much more efficient for storing and manipulating data.

  • NumPy is not another programming language but a Python extension module. It provides fast and efficient operations on arrays of homogeneous data. Numpy has fixed size of creation.
  • In Python :lists are written with square brackets. These lists can be homogeneous or heterogeneous
  • Python 목록에 비해 Numpy Arrays를 사용하는 주요 장점은 다음과 같습니다.
    1. It consumes less memory.
    2. Fast as compared to the python List.
    3. Convenient to use.

ReferenceURL : https://stackoverflow.com/questions/993984/what-are-the-advantages-of-numpy-over-regular-python-lists