2015-08-01 2 views
3

Рассмотрим следующий код:Сохранить результат умножения на существующий массив

a = numpy.array([1,2,3,4]) 
b = numpy.array([5,6,7,8]) 
# here a new array (b*2) will be created and name 'a' will be assigned to it 
a = b * 2 

Таким образом, можно NumPy написать результат b*2 непосредственно в памяти уже выделено для a, без выделения нового массива?

ответ

3

Да, это возможно, - вам нужно использовать np.multiply с out параметром:

np.multiply(b, 2, out=a) 

Массив a теперь заполнен с результатом b * 2 (и никакой новая память не была выделена для удержания выхода из функция).

Все функции ufuncs NumPy имеют параметр out, что особенно удобно при работе с большими массивами; это помогает свести потребление памяти к минимуму, позволяя повторно использовать массивы. Единственное предостережение в том, что массив должен иметь правильный размер/форму, чтобы удерживать вывод функции.

+0

Но если есть более сложное выражение, e. г. 'b * 2 + c', могу ли я оценить его без ввода массивов для временных результатов:' multiply (b, 2, temp) 'и' add (temp, c, a) '? – Leonid

+0

@ Leonidas: к сожалению, это одно из ограничений NumPy, операции должны разделиться, как вы писали в своем комментарии. Вам может быть интересна библиотека [numexpr] (https://github.com/pydata/numexpr), которая каким-то образом устраняет эту проблему. –

+0

Спасибо. И вот ответ на мой вопрос: [универсальные функции] (http://docs.scipy.org/doc/numpy/reference/ufuncs.html) – Leonid

Смежные вопросы