在 numpy 中获取日志 returns 的最有效方法是什么

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

构建日志序列的最快最优雅的解决方案是什么returns?

问题主要在于映射一个函数,该函数将第 i 个和第 (i+1) 个元素作为数组中每个元素的输入。

对于一个函数和简单的数组,我可以定义日志 returns 如下:

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:])])

但是,我正在从单个 numpy 元素构建一个列表,然后再次将其转换回 numpy 数组。

我也以相当粗鲁的方式访问元素,因为我对生成器函数或 numpy 内部结构没有什么经验。

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:])])

等同于

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

np.log takes the log of every value in ar, and np.diff 取每对连续值之间的差值。