извините за столько вопросов. Я использую Mac OSX 10.6 на Intel Core 2 Duo. Я запускаю некоторые тесты для своего исследования, и я столкнулся с другой вещью, которая меня сбивает с толку.
Если я побегу
python -mtimeit -s 'import numpy as np; a = np.random.randn(1e3,1e3)' 'np.dot(a,a)'
Я получаю следующий вывод: 10 loops, best of 3: 142 msec per loop
Однако, если я бегу
python -mtimeit -s 'import numpy as np; a = np.random.randint(10,size=1e6).reshape(1e3,1e3)' 'np.dot(a,a)'
Я получаю следующий вывод: 10 loops, best of 3: 7.57 sec per loop
Потом я побежал
python -mtimeit -s 'import numpy as np; a = np.random.randn(1e3,1e3)' 'a*a'
А потом
python -mtimeit -s 'import numpy as np; a = np.random.randint(10,size=1e6).reshape(1e3,1e3)' 'a*a'
Оба работали со скоростью около 7,6 мс на цикл, так что это не умножение. Сложение также имело сходные скорости, так что ни один из них не должен влиять на скалярный продукт, верно? Так почему же вычисление скалярного произведения с использованием целых чисел более чем в 50 раз медленнее, чем с использованием чисел с плавающей запятой?