python - 如何制作前一个值不满足条件的索引数组?

标签 python arrays loops iteration enumerate

我有两个数组(v_1v_2),我有一个函数接受这些数组,找到它们的值超过阈值的索引,找到前一个和数组的下一个值,并返回一个新数组(v_1fv_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]

最佳答案

  1. 你可能需要 obj >= thresh , 使用 ==与您的问题描述不符。
  2. 为什么要将之前的值与 None 进行比较?您需要检查它是否为 < thresh
  3. 你能澄清一下 nonzero() 是什么吗?打电话是为了?
  4. 您实际上并没有在循环中创建数组。 v_1ffv_2ff是单值。
    修复它的一种方法是预先创建列表 ( v_1ff = [] ),然后在匹配条件时将找到的值附加到列表中。
  5. v_1ff实际上是之前的,而不是之前的索引 -- 你想要哪个?
  6. 如果您对两个列表执行完全相同的操作,那么创建一个函数来为单个列表执行此操作然后只调用它两次会更简洁。

您可能可以通过列表理解更轻松地完成所有这些工作:

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/

相关文章:

doc2vec的Python简单实现?

python - 使用正则表达式排除字符串搜索中的字符?

Python、Keras - 张量 u'dense_2_target : Cannot feed value of shape (10, 的 ValueError : 0', which has shape ' (? 70, 1025)'

python - Apache /Django : ImportError: No module named 'my_project'

python - 在 numpy 和 python 中快速删除重复项

javascript - 如何找到数组中包含值的对象键?

python - 轴 1 上带有 boolean 数组的 Pandas loc() 方法

javascript - While 循环忽略初始条件并且浏览器崩溃

Objective-C:将数组值指定为 NSDictionary 的键

javascript - 永远循环并提供增量时间