Предположим, два больших многомерных массива numpy a
и b
.Я хочу выполнить поэлементную операцию, например, добавив их элемент за элементом:
c = a + b
В приведенном выше случае новая память выделяется для результата a + b
.Ссылка на эту память затем сохраняется в c
.
Теперь давайте предположим, что память для c
уже выделена.Установив число измерений равным двум, чтобы получить простой пример, я могу сделать следующее:
c[:, :] = a + b
Я не могу найти никакой документации о том, как точно реализовано вышеизложенное.Я могу представить себе два способа:
- Сначала выделяется память для выполнения операции
a + b
.Результат сохраняется в этой «временной» памяти до того, как данные, т. Е. Результат операции, копируются в c[:, :]
. - Нет выделения временной памяти.Результат
a + b
переходит непосредственно в c[:, :]
.
Я немного поиграл с кодом и - я могу быть абсолютно не прав здесь - с точки зрения производительности кажется, что первый вариант более вероятен.Я прав?Если это так, как я могу избежать выделения «временной памяти» и напрямую сохранить результат в памяти, которая уже доступна в c
?Я предполагаю, что мне нужно быть более явным, использовать такие функции, как numpy.add
и предоставлять им ссылки на целевую память.