Я искал способы легко многопоточить некоторые из моего простого кода анализа, так как я заметил numpy, что он использовал только одно ядро, несмотря на то, что он должен быть многопоточным.
Я знаю, что numpy настроен для нескольких ядер, так как я могу видеть тесты с использованием numpy.dot, используя все мои ядра, поэтому я просто переопределял среднее значение как точечный продукт, и он работает быстрее. Есть ли какая-то причина, которая не может справиться с этим быстро? Я нахожу подобное поведение для больших массивов, хотя отношение близко к 2, чем показанное в моем примере.
Я читал кучу сообщений о подобных проблемах с числовой скоростью и, по-видимому, был более сложным, чем я думал. Любое понимание было бы полезно, я бы предпочел просто использовать среднее значение, поскольку он более читабельный и меньше кода, но я могу переключиться на методы на основе точек.
In [27]: data = numpy.random.rand(10,10)
In [28]: a = numpy.ones(10)
In [29]: %timeit numpy.dot(data,a)/10.0
100000 loops, best of 3: 4.8 us per loop
In [30]: %timeit numpy.mean(data,axis=1)
100000 loops, best of 3: 14.8 us per loop
In [31]: numpy.dot(data,a)/10.0 - numpy.mean(data,axis=1)
Out[31]:
array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.11022302e-16, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
-1.11022302e-16])