문제

Python에서 1d 배열을 만드는 경우 NumPy 패키지를 사용하면 어떤 이점이 있습니까?

도움이 되었습니까?

해결책

그것은 모두 어레이로 무엇을 하려는지에 달려 있습니다.당신이 하고 있는 일이 단순한 데이터 유형의 배열을 만들고 I/O를 수행하는 것뿐이라면, 정렬 모듈은 잘 작동할 것입니다.

반면에 어떤 종류의 수치 계산을 수행하려는 경우 배열 모듈은 이에 대한 어떤 도움도 제공하지 않습니다. 넘파이 (그리고 사이파이)은 과학적 작업뿐만 아니라 고급 이미지 조작이나 일반적으로 많은 양의 데이터로 효율적인 계산을 수행해야 하는 모든 작업에 유용한 배열과 특수 기능 사이의 다양한 작업을 제공합니다.

Numpy는 또한 훨씬 더 유연합니다.이는 모든 유형의 Python 객체 배열을 지원하며, 객체가 다음을 준수하는 경우 자신의 객체와 "기본적으로" 상호 작용할 수도 있습니다. 어레이 인터페이스.

다른 팁

이것이 유용하다고 생각하는 사람을 위한 작은 부트스트래핑입니다(@dF의 탁월한 답변에 따라).

import numpy as np
from array import array

# Fixed size numpy array
def np_fixed(n):
    q = np.empty(n)
    for i in range(n):
        q[i] = i
    return q

# Resize with np.resize
def np_class_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q = np.resize(q, q.shape[0]*2)        
        q[i] = i
    return q    

# Resize with the numpy.array method
def np_method_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q.resize(q.shape[0]*2)
        q[i] = i
    return q

# Array.array append
def arr(n):
    q = array('d')
    for i in range(n):
        q.append(i)
    return q

isize = 1000
n = 10000000

출력은 다음을 제공합니다.

%timeit -r 10 a = np_fixed(n)
%timeit -r 10 a = np_class_resize(isize, n)
%timeit -r 10 a = np_method_resize(isize, n)
%timeit -r 10 a = arr(n)

1 loop, best of 10: 868 ms per loop
1 loop, best of 10: 2.03 s per loop
1 loop, best of 10: 2.02 s per loop
1 loop, best of 10: 1.89 s per loop

array.array가 약간 더 빠르고 'api'가 번거로움을 덜어주는 것 같지만, double을 저장하는 것 이상이 필요한 경우 numpy.resize는 결국 나쁜 선택이 아닙니다(올바르게 사용된다면).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top