Подтвердить что ты не робот

Numexpr.evaluate( "A + B", из = а)

Безопасно ли в python numexpr назначать значения одному и тому же массиву, на котором вы работаете, чтобы избежать создания временного массива?

Из описания использования памяти на домашней странице она выглядит нормально, но без погружения в исходный код это вряд ли является солидным ответом.

Я попробовал следующее, что прекрасно работает, но я надеюсь получить подтверждение от кого-то, более знакомого с этим пакетом:

import numpy as np
import numexpr as ne
a = np.ones(5)
b = a.copy()
ne.evaluate("a+b",out=a)
array([ 2.,  2.,  2.,  2.,  2.])
4b9b3361

Ответ 1

Это работает, потому что numexpr по-прежнему использует временные массивы внутри, хотя в размерах блоков 1024 элемента (или 4096 при использовании VML). Вы можете думать об этих кусках входов в виде срезов, хотя они сохраняются в качестве соответствующих типов данных C для скорости и компактности памяти во время оценки. Результаты будут сохранены в параметр out после вычисления каждого фрагмента, иначе он должен выделить массив того же размера, что и входы.

Ознакомьтесь с разделом Why It Works для псевдокода о том, как numexpr оценивает векторизованную арифметику.