2014-12-18 2 views
1

저는 파이썬에서 매우 많은 목록을 사용하여 몇 가지 수학을하고 있지만 그 후에는 상당히 뒤떨어지기 시작했습니다 (~ 20 초). 필자는 다차원 및 편평한 목록을 비교하기 시작했습니다.성능 : 다차원리스트 대 평면 목록

코드

from timeit import timeit 
from sys import getsizeof 
print("Literals:") 
print("Flat list: {} seconds".format(timeit("[1, 2, 3, 1, 2, 3, 1, 2, 3]"))) 
print("Mult list: {} seconds".format(
    timeit("[[1, 2, 3], [1, 2, 3], [1, 2, 3]]"))) 
a = list(range(100)) 
b = [list(range(i * 10, i * 10 + 10)) for i in range(10)] 
print("\nSizes:") 
print("Flat list: {} bytes".format(getsizeof(a))) 
print("Mult list: {} bytes".format(getsizeof(b))) 
print("\nAppending:") 
print("Flat list: {} seconds".format(
    timeit("a.extend((1, 2, 3))", "a = [1, 2, 3, 1, 2, 3]"))) 
print("Mult list: {} seconds".format(
    timeit("b.append([1, 2, 3])", "b = [[1, 2, 3], [1, 2, 3]]"))) 

출력

Literals: 
Flat list: 0.17474557721948392 seconds 
Mult list: 0.39777811142990527 seconds 

Sizes: 
Flat list: 508 bytes 
Mult list: 100 bytes 

Appending: 
Flat list: 0.11419465630051207 seconds 
Mult list: 0.17854960247173668 seconds 

이 다차원 목록을 변경하지만, 적은 메모리를 가지고하는 데 시간이 더 걸릴 하더군요,하지만 난 많은 등, 확실히 할 수 없다 타이밍의 더 많은 또는 더 적은 시간이 걸리는 다른 방법이 필요합니다. 어느 목록 유형이 더 효율적이고 어떤 상황에 있습니까?

+3

'numpy'를 사용하지 않는 이유가 있습니까? 대용량 목록에서 수학 연산을 수행하는 경우 numpy 배열에서 벡터 연산을 사용하고 파이썬 목록에서 반복 연산을 사용하는 것의 성능 차이는 생각하는 것 중 가장 작은 것입니다. – DSM

+0

저는 파이썬 프로그래밍에 대해 상당히 새로운 지식을 가지고 있습니다. 그것을 제안 주셔서 감사합니다! 나는 한 번 훑어 보았고 완벽 해 보인다. –

답변

0

getsizeof은 가장 바깥 쪽 목록의 메모리 크기 만 반환합니다. 또한 목록을 만드는 데 걸리는 시간은 목록의 계산과 비교할 때 무시해도됩니다. 숫자가 큰 숫자로 된 성능의 경우 numpy를 사용하십시오.