numpy의 합계 함수가 특정 수의 값을 추가하는 데 걸리는 시간을 측정했습니다. 아래의 곡선은 numpy의 합계 기능 (녹색)과 표준 파이썬 (루프)이 요소 당 을 더하는 데 걸리는 시간을 나타냅니다.. 예를 들어 10 요소의 배열에서 numpy의 sum 함수를 사용하는 경우 각 요소는 평균 2 -19 초가 필요합니다.Numpy sum은 더 많은 항목으로 더 빨라졌습니다.
random_vector = np.random.random(10**7)
def for_sum(vector, n):
sum = 0
start_time = time.perf_counter()
for i in range(n):
sum += vector[i]
return time.perf_counter() - start_time
def numpy_sum(vector, n):
new_vector = vector[:n]
start_time = time.perf_counter()
np.sum(new_vector)
return time.perf_counter() - start_time
# determines the number of elements we should sum
spaced_values = np.logspace(1, 7, num=30, dtype=int)
# Measure time for for loops, per entry
for_sum_times_per_entry = np.zeros(0)
for i in spaced_values:
for_sum_times_per_entry = np.append(for_sum_times_per_entry, for_sum(random_vector, i)/i)
# Measure time for numpy sum function, per entry
numpy_sum_times_per_entry = np.zeros(0)
for i in spaced_values:
numpy_sum_times_per_entry = np.append(numpy_sum_times_per_entry, numpy_sum(random_vector, i)/i)
# Plot the amount of time required to sum each entries
plt.loglog(spaced_values, for_sum_times_per_entry, basex=10, basey=2)
plt.loglog(spaced_values, numpy_sum_times_per_entry, basex=10, basey=2)
plt.xlabel("Number of values summed")
plt.ylabel("Single entry computing time (s)")
plt.show()
NumPy와 합 곡선 1 개 요소에 필요한 처리 시간을 합산 증가 될 요소의 총 개수와 같은 더 낮은 얻는 것을 나타낸다 : 여기
코드이다.이것은 무엇 때문입니까? 내 생각에 numpy의 합계 함수는 처리 시간을 증가시키는 특정 오버 헤드를 갖는다. 이 오버 헤드에는 일정한 시간이 걸리므로 요소를 추가 할 때 중요성이 점차적으로 줄어 듭니다.
생성하고, 오버 헤드가 np.sum '에있다 (X)'. 우선,'x.sum'이 존재하는지 먼저 확인한 다음, 그 것을 연기합니다. – Eric
그래, 그 func 호출 오버 헤드, 그래서 당신이 시간을 np.sum (np.array()]') 및 다양한 오버 헤드를 계산하는 의도와 함께 다양한 datasizes 타이밍에서 뺄 수있을 것으로 보인다. – Divakar