我有一个案例,需要找到一个numpy数组中数值为1
的若干项的最优分布。假设我有以下数组,该数组仅以随机顺序包含0
和1
:
import numpy as
# this 1d array can have up to 10000 elements
data = np.array([
0, 0, 0, 0, 0, 1, 0,
0, 1, 0, 0, 0, 1, 1,
1, 1, 0, 0, 0, 1, 1,
0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 0, 0, 1,
])
num_of_ones_to_fill_gaps = 5
此外,我有一定数量的n
个1
(num_of_ones_to_fill_gaps
),需要以某种方式在数组中分布,以建立最长可能的连续1
序列。使用num_of_ones_to_fill_gaps=5
(可以用五个1
来填补值为0
的空隙),例如有三种结果,它们都具有长度为11
的最长1
序列。
a) b) c)
result = np.array([ | result = np.array([ | result = np.array([
0, 0, 0, 0, 0, 1, 0, | 0, 0, 0, 0, 0, 1, 1, | 0, 0, 0, 0, 0, 1, 1,
^ ^
0, 1, 0, 0, 0, 1, 1, | 0, 1, 0, 0, 0, 1, 1, | 0, 1, 0, 0, 0, 1, 1,
^ ^ ^ ^ ^ ^ ^
1, 1, 0, 0, 0, 1, 1, | 1, 1, 0, 0, 0, 1, 1, | 1, 1, 0, 0, 0, 1, 1,
^ ^
0, 0, 0, 0, 1, 1, 1, | 0, 0, 0, 1, 1, 1, 1, | 0, 0, 0, 0, 1, 1, 1,
^ ^ ^ | ^ ^ ^ ^ |
1, 1, 1, 1, 1, 1, 1, | 1, 1, 1, 1, 1, 1, 1, | 0, 0, 0, 0, 1, 1, 1,
^ ^ ^ ^ ^ ^ ^ | ^ ^ ^ ^ ^ ^ ^ |
1, 0, 0, 0, 0, 0, 1, | 0, 0, 0, 0, 0, 0, 1, | 0, 0, 0, 0, 0, 0, 1,
^ | |
]) | ]) | ])
我的第一个问题是,是否有可能numpy提供内置的向量化方法来计算最长可能的1
序列,并返回相同长度结果的起始和结束索引(多个)?
result = np.array([
(22, 32),
(21, 31),
(5, 15),
])
我的第二个问题是是否存在一个numpy向量化的方法,可以提取所有可能的1
序列(包括填充了间隙的序列),不管它们的长度是多少。结果可能如下所示:
result = np.array([
(0, 4), # data[0:4], data.size == 5
(1, 6), # data[1:6], data.size == 6 because index at position 5 is a 1
(2, 7), # data[2:7], data.size == 6 because index at position 5 is a 1
(3, 9), # data[3:9], data.size == 7 because indices at position 5 and 8 are a 1
...
])
我尝试以易懂的方式概述了问题。我在文档和stackoverflow上进行了研究,但不知道如何开始。我找到的都是迭代解决方案。非常感谢您能给出任何建议和解决方案。再次感谢!