使用trendy.py计算极值时出现空序列ValueError问题求助
解决
min() arg is an empty sequence错误的思路 首先,这个错误的核心原因很明确:当执行min(x[(min1 + window):])时,min1 + window的值大于等于你的数据总长度(100),导致切片出来的序列是空的,而min()函数不能接收空序列作为参数。
你推测问题出在min1的计算上完全正确——原代码里的min1计算逻辑大概率没有考虑窗口大小与数据长度的边界限制。举个例子:假设你的window参数是20,当min1被计算为85时,85+20=105,已经超过了100天的数据长度,这时候x[105:]就是空序列,直接触发报错。
下面是具体的解决步骤:
- 先确认窗口大小的合理性:你的数据是固定100天,要保证
window的值满足window < len(x)/2(比如最大不超过49),这样哪怕min1出现在数据前半段,min1+window也不会超出数据长度。如果业务上必须用较大的window,那就要在后续逻辑里做特殊处理。 - 修正min1的计算逻辑:在找到min1的候选索引后,过滤掉那些
min1 >= len(x) - window的结果。比如原代码如果是找整个序列里最小值的索引,那要改成找x[:len(x)-window]这个子序列里的最小值索引,确保后面有足够的元素可以取切片。 - 给min2的计算加边界判断:在调用min()之前先检查切片是否为空,避免直接报错,比如:
# 替换原来的min2计算代码 post_min1_slice = x[(min1 + window):] if not post_min1_slice: # 这里可以根据业务需求调整,比如取最后window个元素的最小值,或者标记该数据不符合计算条件 min2 = min(x[-window:]) else: min2 = min(post_min1_slice)
- 同步检查Max类指标的逻辑:既然min系列出现了边界问题,Max1、Max2的计算大概率也存在同样的风险,建议一并排查修正,避免后续出现类似的ValueError。
内容的提问来源于stack exchange,提问作者Yousuf
相关产品推荐
相关产品推荐

