【发布时间】:2014-11-30 09:29:59
【问题描述】:
我所拥有的是一个大的 numpy 一维 np.int16 数组,其中包含数据和一个布尔数组,它存储特定样本(至多 samplesize 长)数据是否适合某些数据的信息标准(有效)或不符合(无效)。
我的意思是我有这样的事情:
samplesize = 5
data = array([1, 2, 3, 4, 5, 3, 2, 1, 3, 2, 4, 5, 2, 1, 1], dtype=int16)
membership = array([False, True, False], dtype=bool)
这里membership[0] 标识data[ 0*samplesize : 1*samplesize ] 是否有效。
我想要的是根据成员数组中True 值的序列将数据数组拆分为块。例如,如果membership 包含三个或更多连续的True 语句,则判定它是data 的有意义样本。
示例
True, True, True , True - valid sequence
True, True, False, True , True - invalid sequece
假设我们已将i-th 有效序列的开头标识为start[i],并将此类序列的结尾标识为end[i],我想将data 数组拆分为多个片段从start[i] * samplesize 开始,最后到end[i] * samplesize。
我怎么能做到这一点?
【问题讨论】:
-
你已经用
np.split尝试了什么,你的问题在哪里? -
我无法使用
np.split,因为它只能按已知索引列表进行拆分。我需要通过分析membership数组来找到分裂的边缘,这就是问题 - 如何找到连续True语句的这些开始和结束索引。 -
我也不能使用条件拆分。我想过
itertools.groupby,但我很好奇是否有更有效的解决方案。 -
将
np.diff应用到membership怎么样?