我有两个数组(v_1
和v_2
),我有一个函数接受这些数组,查找其值超过阈值的索引,找到数组的上一个和下一个值,并返回一个新数组(v_1f
和v_2f
),其中包含前一个值未达到阈值的索引。
但是,由于某些原因,return
语句没有给我这些数组。这是为什么?此外,该函数是否应该生成具有我想要条件的数组?
def findbursts(v_1,v_2):
for index, obj in enumerate(v_1):
if obj == thresh:
v_1f=(obj).nonzero()[0]
# TODO Bounds-checking
previous = v_1f[index - 1]
if previous == None:
v_1ff = v_1f
for index, obj in enumerate(v_2):
if obj == thresh:
v_2f=(obj).nonzero()[0]
# TODO Bounds-checking
previous = v_2f[index - 1]
if previous == None:
v_2ff = v_2f
return [v_1ff, v_2ff]
答案 0 :(得分:4)
obj >= thresh
,使用==
与您的问题说明不符。None
进行比较?您需要检查它是否< thresh
nonzero()
来电的内容吗? v_1ff
和v_2ff
是单个值
修复它的一种方法是预先创建列表(v_1ff = []
),然后在匹配条件时将找到的值附加到列表中。 v_1ff
实际上是之前的值,而不是之前的索引 - 您想要哪个?你可以通过列表理解更轻松地完成所有这些:
from itertools import izip
def find_bursts(data, thresh):
return [i for i, (val, next_val) in enumerate(izip(data[:-1], data[1:]))
if val < thresh and next_val >= thresh]
故障:
izip(data([:-1], data[1:])
作为相邻元素对enumerate
附上指数if val < thresh and next_val >= thresh
是您的过滤条件