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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With