【发布时间】:2020-10-24 03:08:13
【问题描述】:
下面的代码尝试解决以下任务:“找出任何 5 天滚动窗口,超过 1000 天的最大价格变化”。
我所说的“任何 5 天滚动窗口”不仅仅指“t_i + 5”,而是“t_i + j”,其中“i”从 1 到 1000 不等,“j”从 1 到5.
我曾尝试使用 Numpy 原生函数,但最终还是使用“for-loop”进行内部迭代。代码如下:
prices = npr.random([1000,1])*1000
max_array = np.zeros([(prices.size-5),1])
for index, elem in np.ndenumerate(prices[:-5,:]):
local_max = 0.0
for i in range(1,6,1):
price_return = prices[(index[0] + i),0] / elem
local_max = max(local_max, price_return)
max_array[index[0]] = local_max
global_max = np.amax(max_array)
我能否以某种方式消除内部 for 循环并使用 Numpy 向量化(不知何故)?
另外,我不太喜欢使用“index[0]”从通过调用返回到变量“index”的元组对象中提取当前循环的实际索引:
for index, elem in np.ndenumerate(prices[:-5,:]):
这也可以改进吗?
【问题讨论】:
-
“找出任何 5 天滚动窗口内的最大价格变化,超过 1000 天”。如果你明确地寻找一个 5 天的窗口,你为什么需要内部循环呢?您只对每次窗口迭代的 min 和 max 之间的最大差异感兴趣。检查1-4天也没有好处,结果会一样
-
我不认为结果会是一样的。任何 5 天滚动窗口内的最大变化不一定来自 5 天窗口中的第一天和最后一天。我对任意 5 天窗口内任意两天之间可能发生的最大变化感兴趣。
-
好的,我不清楚更改必须在连续两天内