在python中,当值为1时,如何获得每行的列索引?

gwo2fgha  于 2023-08-02  发布在  Python
关注(0)|答案(4)|浏览(84)

在:

p= np.array([[0,  1,  0,  1],
              [0,  0,  0,  0],
              [1,  0,  0,  0],
              [0,  0,  1,  0]])

字符串
当值为1时,我如何获得每行的列索引。
output 1:例如,第一行的第1列和第3列都是1,那么我们存储这些值。

[[1,3],[], [0], [2]]


然后,为便于计数,将每个值+1,并在数组p中没有1时将0放入[]。
输出2:

[[2,4],[0], [1], [3]]

  • 谢谢-谢谢
bprjcwpo

bprjcwpo1#

您可以使用解析:

res1 = [[idx+1 for idx, val in enumerate(row) if val] for row in p]
res2 = [[0] if a == [] else a for a in res1] 
print(res2)

字符串
给出:

[[2, 4], [0], [1], [3]]

4uqofj5v

4uqofj5v2#

使用两级ITER来得到这个。

p = np.array([[0, 1, 0, 1],
                  [0, 0, 0, 0],
                  [1, 0, 0, 0],
                  [0, 0, 1, 0]])
    res = []
    for row in p:
        tmp = []
        for idx, value in enumerate(row):
            if value == 1:
                tmp.append(idx+1)
        if len(tmp) == 0:
            tmp.append(0)
        res.append(tmp)
    print(res)

字符串
输出量

[[2, 4], [0], [1], [3]]

blmhpbnm

blmhpbnm3#

可以使用np.nonzero

lst = [[val + 1 if val else 0 for val in np.nonzero(lst)[0]] for lst in p]
print(lst) # [[2, 4], [], [0], [3]]

字符串

xqnpmsa8

xqnpmsa84#

使用np的简短一行程序,其中:

[list(np.where(r==1)[0]+1) or [0] for r in p]

[[2, 4], [0], [1], [3]]

字符串

相关问题