You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Numpy判断当前价格是否为前K个价格中的最大/最小值?

解决Numpy滑动窗口下的极值判断问题

你可以用Numpy的np.lib.stride_tricks.sliding_window_view来实现滑动窗口的极值计算,配合简单的条件判断就能得到目标结果。以下是针对你需求的完整实现:

import numpy as np

def generate_signal(prices, k):
    n = len(prices)
    signals = np.zeros(n, dtype=int)
    
    # 当k大于数组长度时直接返回全0数组(可选边界处理)
    if k > n:
        return signals
    
    # 生成滑动窗口,每个窗口包含当前位置及前k-1个元素
    windows = np.lib.stride_tricks.sliding_window_view(prices, window_shape=k)
    
    # 计算每个窗口的最大值和最小值
    window_max = np.max(windows, axis=1)
    window_min = np.min(windows, axis=1)
    
    # 获取对应位置的价格(窗口的最后一个元素)
    current_prices = prices[k-1:]
    
    # 赋值信号:最大值为1,最小值为-1
    signals[k-1:] = np.where(current_prices == window_max, 1, 
                            np.where(current_prices == window_min, -1, 0))
    
    return signals

# 测试你的示例
prices = np.array([1,2,3,2,1,6])
k = 3
print(generate_signal(prices, k))  # 输出: [0 0 1 0 -1 1]

关键步骤解释:

  • 滑动窗口生成:sliding_window_view会将输入数组转换为形状为(n-k+1, k)的二维数组,每一行对应一个长度为k的滑动窗口。比如你的示例数组会生成窗口:[[1,2,3], [2,3,2], [3,2,1], [2,1,6]]。
  • 极值计算:对每个窗口沿轴1计算最大/最小值,得到和窗口数量一致的极值数组。
  • 信号赋值:用嵌套np.where完成多条件判断,将符合最大值的位置设为1,最小值设为-1,其余为0,最后把结果赋值给信号数组的对应位置(从第k-1位开始)。

兼容旧版本Numpy(<1.20)的替代方案:

如果你的Numpy版本不支持sliding_window_view,可以用np.lib.stride_tricks.as_strided手动构造滑动窗口(注意需确保数组是连续的):

def generate_signal_old(prices, k):
    n = len(prices)
    signals = np.zeros(n, dtype=int)
    
    if k > n:
        return signals
    
    # 手动构造滑动窗口
    stride = prices.strides[0]
    windows = np.lib.stride_tricks.as_strided(prices, 
                                             shape=(n - k + 1, k),
                                             strides=(stride, stride))
    
    window_max = np.max(windows, axis=1)
    window_min = np.min(windows, axis=1)
    current_prices = prices[k-1:]
    
    signals[k-1:] = np.where(current_prices == window_max, 1, 
                            np.where(current_prices == window_min, -1, 0))
    
    return signals

这样就能完美满足你的需求,前k-1个元素默认设为0,后续元素根据是否是前k个价格的最大/最小值输出对应信号。

内容的提问来源于stack exchange,提问作者MUHAMMAD LABEEB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:20:45