What is the most efficient way to get log returns in numpy

一世执手 提交于 2019-12-23 02:17:17

问题


What is the fastest and most elegant solution to building a sequence of log returns?

The problem is mainly around mapping a function that takes the i'th and (i+1)'th elements as inputs for every element in the array.

for a function and simple array I can define the log returns as follows:

import numpy as np
ar = np.random.rand(10)
f_logR = lambda ri, rf: np.log(rf) - np.log(ri)

logR = np.asarray([f_logR(ar[i], rf) for i,rf in enumerate(ar[1:])])

However, I am building a list from individual numpy elements and then converting it back into a numpy array again.

I am also accessing the elements in a fairly brutish way as I have little experience with generator functions or numpy internals.


回答1:


f_logR = lambda ri, rf: np.log(rf) - np.log(ri)
logR = np.asarray([f_logR(ar[i], rf) for i,rf in enumerate(ar[1:])])

is equivalent to

logR = np.diff(np.log(ar))

np.log takes the log of every value in ar, and np.diff takes the difference between every consecutive pair of values.



来源:https://stackoverflow.com/questions/30087636/what-is-the-most-efficient-way-to-get-log-returns-in-numpy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!