【发布时间】:2019-07-26 17:18:50
【问题描述】:
我有一个 numpy 数组的形式:
a = numpy.array([0,2,2,3,4,2,5,5,6,2,5,6,4,4,2,3,1,7,7,2,3,3,4,1,8,9,8,8])
threshold = 4
threshold_seq_len = 5
subarray_seq_len = 4
我希望实现的输出是
b =[array([5,5,6,2,5,6]), array([8,9,8,8])]
我想根据条件提取子数组:
1) 子数组应根据小于或等于 阈值 的值序列进行拆分。在上述情况下,第一个子数组([5,5,6,2,5,6]) 出现在序列[0,2,2,3,4,2] 之后,所有子数组都小于或等于阈值 4。
2) 阈值序列应至少与 threshold_seq_len 一样长,否则它们将只是子数组的一部分。请注意,value '2' 存在于第一个子数组中,因为它是单个出现的 (length =1)。
3) 子数组本身应至少与 subarray_seq_len 一样长。例如,索引 17 和 18 处的值各为 7,但自 length<4 以来不考虑它们。
对于上下文,数组表示音频文件中的振幅,我正在尝试根据所描述的逻辑提取可行的非静音候选。
什么是有效实现这一目标的pythonic方法?
我已经尝试过Extract subarrays of numpy array whose values are above a threshold中描述的方法。
问题是,这个问题似乎是我的问题(threshold_seq_len=1, subarray_seq_len=1) 的一个具体案例,因为该任务仅涉及根据阈值的出现来拆分一个数组。我一直在尝试概括它,但到目前为止都失败了。
【问题讨论】:
-
谢谢@Divakar 有没有办法不将此作为后处理步骤?时间是关键。
-
@Divakar 这将过滤掉标准 2 中的
2 -
这是一个有效的子数组吗? [5,2,5,2,6,2,5,2,6]
-
@Ardweaden 是一个非常不受欢迎的边缘案例,但根据我的给定逻辑,它是一个公平的候选人。
-
有了
threshold_seq_len = 5,那不应该只有一个子数组吗?