在一个numpy矩阵中,找到包含一个值最多且有一个约束的内部列表

时间:2018-10-01 05:16:23

标签: python numpy

我有一个类似下面的numpy矩阵:

matrix = [[0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
           0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
           0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1.],
         [0., 1., 1., 1., 1., 0., 1., 1., 0., 1., 1., 0., 0., 1., 1., 0.,
           1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
           0., 0., 0., 1., 0., 0., 1., 0., 1., 0., 0., 1., 0.],
         [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,
           0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
           0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]  

edit:响应对矩阵输出的请求,转向数组如何?
m = np.array(matrix)

我试图找到包含1或0最多的内部列表,有一个约束

约束是,在内部列表中搜索最多的1或0时,会对内部列表进行分段。例如,每个内部列表应在第12个索引处进行细分。
因此,当搜索最长的1或0时,它可能位于第一个内部列表的第一段(第12个索引之前),也可能位于最后一个段(第12个索引之后)。

是否有更简单的numpy方法来完成此任务?

输出格式是灵活的,只要它表示内部列表索引,并且True表示“第12个索引之前”或False表示“第12个索引之后”。

这是一个例子:
这些示例答案对应于上面的示例矩阵
大多数ONES:1True(内部列表位置的索引,True表示它在第12个索引之前)。
多数零:2False(列表索引,False是因为索引之后)

这可能有点令人困惑-请让我知道我是否可以为您澄清一些内容。

edit:进行澄清,而不是搜索最长的序列。搜索具有给定值最多出现的细分。

1 个答案:

答案 0 :(得分:1)

IIUC查找1,您可以使用以下代码,对于0将1替换为0:

a = np.array(matrix)
#taking values only till 12th index
Before_12_index = (a[:,:13]==1).sum(1)
#taking values only after 12th index
After_12_index = (a[:,13:]==1).sum(1)

#condition for checking whether they have max number of 1 before or after 12th index
cond_1 = (Before_12_index>After_12_index).reshape(-1,1)

cond_1
array([[False],
       [ True],
       [ True]])