Порядок массивов в `numpy.dot`

В числовой библиотеке Python NumPy , как функция numpy.dot работает с массивами с разным порядком памяти? numpy.dot (c-порядок, f-порядок) vs. точка (f-порядок, c-порядок) и т. Д.

Я спрашиваю, потому что давным-давно (numpy 1.0.4?), я провел несколько тестов и заметил, что numpy.dot работает хуже, чем вызов dgemm из scipy.linalg напрямую, с правильным транспонированием flags, хотя оба вызывают внутри одну и ту же библиотеку BLAS. (Я подозревал, что причина в копировании входных матриц внутри numpy.dot , что печально, если ввод большой.)

Теперь я попробовал еще раз, и на самом деле numpy.dot работает так же, как dgemm , так что нет причин хранить массивы в конкретный порядок и установить флаги транспонирования вручную. Гораздо чище код.

Итак, мой вопрос: как последний (скажем, 1.6.0) numpy.dot работает, гарантирует, когда что-то копируется, а когда нет? Меня беспокоит 1) память 2) производительность здесь. Ура.

15
задан Radim 19 May 2011 в 16:22
поделиться