Порядок массивов в `numpy.dot` - PullRequest
15 голосов
/ 19 мая 2011

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

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

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

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

1 Ответ

1 голос
/ 29 мая 2011

Возможно, то, что вы видели, могло быть связано с бласт-оптимизированной ошибкой импорта точек, которая была уловлена ​​и обработана без вывода сообщений (этот фрагмент кода взят из numeric.py)

# try to import blas optimized dot if available
try:
    # importing this changes the dot function for basic 4 types
    # to blas-optimized versions.
    from _dotblas import dot, vdot, inner, alterdot, restoredot
except ImportError:
    # docstrings are in add_newdocs.py
    inner = multiarray.inner
    dot = multiarray.dot
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...