如何在 Python 中通过预定列将矩阵零控制为 1?

How can I control matrix zero to be 1 by predetermined column in Python?

提问人:Maluma Corazón 提问时间:9/6/2023 最后编辑:ThomasIsCodingMaluma Corazón 更新时间:9/7/2023 访问量:41

问:

假设我有一些这样的列列表:

   res = [[2],[3, 4],[0],[5]]

然后,我需要将这个零矩阵 4X4 更改为上面列表中的 1 列;例如:第一行在第 2 列中绘制 1,第二行在第 3 列和第 4 列中绘制 1,第三行由于 [0] 而没有绘制,第四行在第 5 列中绘制 1。zrres

  zr = np.array([[0, 0, 0, 0, 0, 0,],
                 [0, 0, 0, 0, 0, 0,],
                 [0, 0, 0, 0, 0, 0,],
                 [0, 0, 0, 0, 0, 0 ]]

目标:

  zr = np.array([[0, 1, 0, 0, 0, 0,],
                 [0, 0, 1, 1, 0, 0,],
                 [0, 0, 0, 0, 0, 0,],
                 [0, 0, 0, 0, 1, 0 ]]

当 res 中的某些成员等于 [0] 时,我当前的编码发生了错误的更改:

for i, x in enumerate (res):
    if x==0:
        continue
    else:
        for j in x:
            zr[i][j-1] = 1

           

你有什么建议吗?谢谢。

Python 数组 列表 numpy 矩阵

评论

0赞 jpsmith 9/7/2023
为什么要标记 R?

答:

2赞 Lucas Moura Gomes 9/6/2023 #1

这是您要执行的操作。如果找到 [0] 作为内部列表,则将跳过该行。

for i, x in enumerate (res):
    if x == [0]: 
        continue
    else:
        for j in x:
            zr[i][j-1] = 1

print(zr)

输出:

[[0 1 0 0 0 0]
 [0 0 1 1 0 0]
 [0 0 0 0 0 0]
 [0 0 0 0 1 0]]

你做错了什么,你试图将 x(这是一个列表)与 0 进行比较。这总是错误的。

0赞 ThomasIsCoding 9/7/2023 #2

您可以尝试从 ,例如,putnumpy

for i in range(len(zr)):
    np.put(zr[i], np.array(res[i])-1, 1)

你会看到

>>> print(zr)
[[0 1 0 0 0 0]
 [0 0 1 1 0 0]
 [0 0 0 0 0 1]
 [0 0 0 0 1 0]]