Numpy позволяет добавлять / умножать / делить матрицы разных размеров при соблюдении определенных правил вещания . Кроме того, создание временных массивов является основным препятствием для скорости numpy.
Следующие результаты меня удивляют ... что происходит?
In [41]: def f_no_dot(mat,arr):
....: return mat/arr
In [42]: def f_dot(mat,arr):
....: denominator = scipy.dot(arr, scipy.ones((1,2)))
....: return mat/denominator
In [43]: mat = scipy.rand(360000,2)
In [44]: arr = scipy.rand(360000,1)
In [45]: timeit temp = f_no_dot(mat,arr)
10 loops, best of 3: 44.7 ms per loop
In [46]: timeit temp = f_dot(mat,arr)
100 loops, best of 3: 10.1 ms per loop
Я думал, что f_dot будет медленнее, так как он должен был создать временный знаменатель массива, и я предположил, что этот шаг был пропущен f_no_dot. Я должен отметить, что это время линейно масштабируется (с размером массива до 1 миллиарда) для f_no_dot и немного хуже, чем linear для f_dot.