【发布时间】:2018-12-08 15:39:02
【问题描述】:
我想找到满足条件的数组的索引。
我有一个 numpy.ndarray B: (m = 行数 = 8 和 3 列)
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 1.],
[ 0., 1., 1.],
[ 0., 1., 0.],
[ 1., 1., 0.],
[ 1., 1., 1.],
[ 1., 0., 1.],
[ 1., 0., 0.]])
对于每一列,我想找到元素满足以下条件的行的索引: 对于列中的 col: B(row,col)=1 和 B(row+1,col)=1 对于所有 rows=1,2,..,m-1 和 B(row,col)=1 对于 rows=0 和 m。
所以期望的结果是:
Sets1=[[5, 6, 7, 8], [3, 4, 5], [2, 6]]
到目前为止,我已经尝试过:
Sets1=[]
for j in range(3):
Sets1.append([i for i, x in enumerate(K[1:-1]) if B[x,j]==1 and B[x+1,j]==1])
但这只是条件的第一部分,并给出以下错误输出,因为它采用新集合的索引..所以它实际上应该是加 1..
Sets1= [[4, 5, 6], [2, 3, 4], [1, 5]]
条件的第二部分也适用于索引 0 和 m。还没有。。
编辑:我通过编写 i+1 修复了加 1 部分,并通过添加以下 if 语句尝试了条件的第二部分:
Sets1=[]
for j in range(3):
Sets1.append([i+1 for i, xp in enumerate(K[1:-1]) if B[xp,j]==1 and B[xp+1,j]==1])
if B[0,j]==1: Sets1[j].append(0)
if B[(x-1),j]==1: Sets1[j].append(x-1)
这确实有效,因为它提供了以下输出:
Sets1= [[5, 6, 7, 8], [3, 4, 5], [2, 6]]
所以现在我只需要为条件的第一部分(在 if 语句之前)的列表元素添加 +1...
非常感谢您的帮助!
【问题讨论】:
标签: python arrays list numpy conditional-statements