从 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.]]  

编辑:为了响应矩阵输出的请求,转向数组怎么样?
m = np.array(matrix)

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

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

有没有更简单的方法来完成这项工作?

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

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

这可能有点令人困惑 - 如果我能为您澄清一些事情,请告诉我。

编辑:澄清,而不是搜索最长的序列。搜索给定值中出现次数最多的段。

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]])

相关内容

最新更新