Возможно, я делаю что-то странное, но, возможно, обнаружил удивительную потерю производительности при использовании numpy, кажется последовательным, независимо от используемой мощности. Например, когда x представляет собой случайный массив 100x100
x = numpy.power(x,3)
примерно в 60 раз медленнее, чем
x = x*x*x
График ускорения для различных размеров массивов показывает сладкое пятно с массивами размером 10k и последовательной скоростью 5-10x для других размеров.
Код для проверки ниже на вашем собственном компьютере (немного грязный):
import numpy as np
from matplotlib import pyplot as plt
from time import time
ratios = []
sizes = []
for n in np.logspace(1,3,20).astype(int):
a = np.random.randn(n,n)
inline_times = []
for i in range(100):
t = time()
b = a*a*a
inline_times.append(time()-t)
inline_time = np.mean(inline_times)
pow_times = []
for i in range(100):
t = time()
b = np.power(a,3)
pow_times.append(time()-t)
pow_time = np.mean(pow_times)
sizes.append(a.size)
ratios.append(pow_time/inline_time)
plt.plot(sizes,ratios)
plt.title('Performance of inline vs numpy.power')
plt.ylabel('Nx speed-up using inline')
plt.xlabel('Array size')
plt.xscale('log')
plt.show()
У кого-нибудь есть объяснение?