Когда у вас есть две матрицы numPy, вы можете вызвать функцию точек, чтобы их умножить. Или вы можете прокручивать каждый вручную и умножать каждое значение вручную. Почему и какова разница в скорости? Конечно, функция точки все еще должна делать это, но нижний уровень?В чем заключается разница между умножением матрицы и циклом?
0
A
ответ
1
Да, оба подхода должны будут перебрать значения в двух матрицах. Тем не менее, питон динамически типизирован таким образом, что тело цикла должно проверять типы трех индексов, используемых для итерации, гарантировать, что индексирование двух входных матриц поддерживается, определить тип значений, извлеченных из матриц, ...
Реализация numpy, как вы сказали, более низкого уровня и делает более сильные предположения о вводе и выводе. В частности, матричное умножение реализуется на статически типизированном языке (C или Fortran - я не могу вспомнить), так что накладные расходы на проверку типов исчезают. Кроме того, индексирование на языках более низкого уровня является относительно простой операцией.
Кроме того, просто цикл в явном цикле Python медленнее, чем цикл с помощью скомпилированного кода. И если вы также выполняете арифметику в Python вместо того, чтобы позволить Numpy делать это, у вас есть накладные расходы на преобразование назад и вперед между машинами или целыми числами и эквивалентными числовыми объектами Python, а также медленностью выполнения арифметики с неизменяемым числовым значением Python объекты. –