我知道有很多类似的问题,但这个问题略有不同。
给定任何行,例如 row = [1 0 0 1 0 1 0 1]
我想输出一行内容为 output = [0 -1 -1 0 -1 3 -1 5]
基本上这就是说,第一个 1,指向它自己。第二个 1
的索引为 3,指向其左侧的 1
,因为 1
的索引为 0,所以它为 0。第 3 个 1
指向它左边的 1
,索引为 3。最后,第 4 个 1
指向它的第一个 1
左边有索引 5
。最后,所有 0
都设置为 -1。
我能够获取所有 1
都使用 numpy.nonzero(row)
的位置的索引,但我不确定如何分隔这些索引与输入数组的维度相同。
最佳答案
如果您在列表上进行迭代(也使用 enumerate
来跟踪元素索引)并将最后一个索引存储在看到 1(低于任何非零值)的位置(除了第一次)
row = [1, 0, 0, 1, 0, 1, 0, 1]
prev_index = None
result = []
for i,v in enumerate(row):
if v:
result.append(i if prev_index is None else prev_index)
prev_index = i
else:
result.append(-1)
>>> result
[0, -1, -1, 0, -1, 3, -1, 5]
这很难通过列表理解来实现,因为需要存储以前的索引。
关于Python - 为每个元素查找左侧第一个非零元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54355028/