我有两个数组(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]
最佳答案
- 你可能需要
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
是你的过滤条件
关于python - 如何制作前一个值不满足条件的索引数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27452440/