Python에서 List에 원소를 추가하는데 걸리는 시간과 Numpy에서 넘파이 배열에 원소를 추가하는데 걸리는 시간을 비교해봤습니다.
예상과 달리 넘파이 배열에 원소를 추가하는 시간이 더 오래 걸립니다.
2021. 11. 29 - 최초작성
Python List에 원소를 추가한 후, 넘파이 배열로 변환하는 방법과 빈 넘파이 배열에 원소를 추가하는 방법 두가지에 대한 코드와 결과입니다.
Python의 List에 원소 추가
import numpy as np import time start = time.time() arr = [] for i in range(1000000): arr.append(i) arr = np.array(arr) print(arr.shape) print("list append time :", time.time() - start) |
1000000의 정수를 추가하는데 0.11초 걸렸습니다.
(1000000,)
list append time : 0.11541223526000977
Numpy의 배열에 원소 추가
import numpy as np import time start = time.time() arr = np.array([]) for i in range(1000000): arr = np.append(arr, i) print(arr.shape) print("numpy append time :", time.time() - start) |
1000000의 정수를 추가하는데 380초 걸렸습니다.
(1000000,)
numpy append time : 380.4620773792267
list append가 numpy append 보다 빠른 이유입니다. ( 출처 https://github.com/numpy/numpy/issues/17090 )
The reason that list.append() is "fast" is because list over-allocates memory for the items it contains, roughly 1/8 extra items than there are in the list. While there are still free slots at the end of the over-allocated memory, list.append() just puts the new item into a free slot. It only has to re-allocate memory once those over-allocated slots are used up. Because the size of the over-allocated memory grows with the size of the list list.append() is roughly constant-time, on average, for building a long list.
numpy does not over-allocate memory. It represents an N-D array, not just a 1-D list, so it can't really over-allocate in all axes. This isn't a matter of whether append() is a function or a method; the data model for numpy arrays just doesn't mesh with the over-allocation strategy that makes list.append() "fast".
There are a variety of strategies to build long 1-D arrays quickly. If you know the target length, you can create the array up-front using np.empty() and then filling it in. If you don't know the target length, accumulating values in a list, then using np.array() at the end to convert it to an array is a good option.
참고
https://getpocket.com/read/3067341635
'Python > Numpy' 카테고리의 다른 글
Python 예제 - Numpy 배열에 열 추가하기 (0) | 2021.12.01 |
---|---|
Python 예제 - Numpy 배열에서 0이 아닌 최소값 찾기 (0) | 2021.12.01 |
NumPy 전체 배열 출력 (0) | 2021.10.04 |
NumPy reshape에 -1을 사용하는 이유 (0) | 2021.10.04 |
두 개의 2차원 넘파이 배열에 0축(axis=0)을 추가하여 하나로 합치기 (0) | 2021.09.30 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!