【发布时间】:2018-02-15 13:30:37
【问题描述】:
我有一个二维数组 (Q),仅包含零和一(二进制矩阵)。对于Q 的每一列,我想找到值 1 出现的第一行和最后一行的索引。每列至少包含一个1。
这是一个例子:
[[1, 1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 0, 0],
[1, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 1, 0, 1, 1],
[1, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 1, 0, 1, 0]]
boundsList = {0: (0, 4), 1: (0, 1), 2: (0, 5), 3: (1, 6), 4: (2, 2), 5: (3, 6), 6: (2, 5)}
我实现了一个算法,它可以工作,但是对于大型数组它效率不高:
boundsList = {}
for i in range (0, len(Q)):
column = Q[:,i]
indexesList = []
for idx, pos in enumerate (column):
if pos == 1:
indexesList.append(idx)
boundsList[i] = (indexesList[0], indexesList[-1])
任何人都可以为这个问题提出另一个简单的解决方案吗?
【问题讨论】:
-
保证每一列至少有一个
1? -
是的,至少会在该列中找到一个值 1。数组中只有值 0 和 1。
-
谢谢先生们,所有提出的算法都优雅地解决了这个问题。
标签: python performance python-3.x numpy multidimensional-array