Есть ли способ ускорить операции векторизованного журнала в scipy оптимизировать?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ ускорить операции векторизованного журнала в scipy оптимизировать?

Сообщение Anonymous »

Я провожу оптимизацию, в ходе которой рассчитываю сумму в долларах, необходимую для получения изменения в конверсии, используя эластичности. Первоначально я использовал простые эластичности, но подумываю о переходе к составным эластичностям. Однако простое выполнение этого простого переключения значительно увеличило время, необходимое мне для оптимизации, примерно с 3 минут до нескольких дней.
Простая эластичность:

Код: Выделить всё

(ChangeInConversion * 100 / Elasticity) * -1
Усугубляемая эластичность:

Код: Выделить всё

(np.log(1 + ChangeInConversion ) / np.log(1 + Elasticity)) * 100 * -1
Есть ли способы ускорить работу или это ожидаемое поведение, если вы начнете использовать журналы в своих функциях оптимизации? Я использую пакет Scipy Optimize. И ChangeInConversion, и Elasticity являются векторами значений (np.arrays).
Спасибо!
Изменить: функция Я использую:

Код: Выделить всё

def FDollarChange(OptimizedUnitCount):
_OptimizedUnitCount = np.array(OptimizedUnitCount)
_OptimizedUnitCountByChannel = np.dot(ChannelMatrix.toarray(), _OptimizedUnitCount)
_ChangeInUnitCountByChannel = _OptimizedUnitCountByChannel - CurrentUnitCountByChannel
ChangeInConversion  = _ChangeInUnitCountByChannel / CurrentUnitCountByChannel

# expand out to full rows
ChangeInConversion  = np.dot(ChannelMatrixT.toarray(), ChangeInConversion)
DollarChange = (ChangeInConversion * 100 / Elasticity) * -1 # simple method
# DollarChange = (np.log(1 + ChangeInConversion) / np.log(1 + Elasticity)) * 100 * -1 # compounding method

return DollarChange, ChangeInConversion

def FTotalProfit(OptimizedUnitCount):
_OptimizedUnitCount = np.array(OptimizedUnitCount)
_DollarChange, _ChangeInConversion = FDollarChange(OptimizedUnitCount)
PostProfit = PreProfit + _DollarChange
TotalProfit = np.dot(_OptimizedUnitCount, TotalProfit)

return PostProfit, TotalProfit

def ObjectiveFunction(OptimizedUnitCount):
_OptimizedUnitCount = np.array(OptimizedUnitCount)
_PostProfit, _TotalProfit = FTotalProfit(_OptimizedUnitCount)

return (_TotalProfit * -1)
Где:
  • Код: Выделить всё

    OptimizedUnitCount
    : по сути, это значения x в оптимизаторе.
  • Код: Выделить всё

    ChannelMatrix
    : По сути, это разреженная матрица, которая группирует по сумме, что позволяет мне вычислить сгруппированную по OptimizedUnitCount
  • Код: Выделить всё

    ChannelMatrixT
    : Транспонируется ли ChannelMatrix, который преобразует объекты обратно в исходный векторный размер.


Подробнее здесь: https://stackoverflow.com/questions/786 ... y-optimize
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»