Numpy:根据值的顺序将数组拆分为多个部分

2024-04-24 03:54:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我所拥有的是一个大块头的一维模型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]标识{}是否有效。在

我想要的是根据成员数组中True值的序列将数据数组分成块。例如,如果membership包含三个或更多个连续True语句,则作出判定,它是data的有意义样本。在

示例

^{pr2}$

假设我们已经将i-第个有效序列的开始标识为start[i],而这样一个序列的结尾是end[i],我想把data数组分成从start[i] * samplesize开始,最后到end[i] * samplesize的片段。在

我怎么能做到这一点?在


Tags: 数据falsetruedata序列数组arraystart
1条回答
网友
1楼 · 发布于 2024-04-24 03:54:10

我不明白你的问题。您想用3个或更多连续的True获取membership的起始和结束索引吗?在

下面是执行此操作的代码,基本思想是diff(membership),并得到上升沿和下降沿的索引:

import numpy as np
membership = np.random.randint(0, 2, 100)
d = np.diff(np.r_[0, membership, 0])
start = np.where(d == 1)[0]
end = np.where(d == -1)[0]
mask = (end - start) >= 3
start = start[mask]
end = end[mask]

for s, e in zip(start, end):
    print s, e, membership[s:e]

相关问题 更多 >