提问人:Maluma Corazón 提问时间:9/6/2023 最后编辑:ThomasIsCodingMaluma Corazón 更新时间:9/7/2023 访问量:41
如何在 Python 中通过预定列将矩阵零控制为 1?
How can I control matrix zero to be 1 by predetermined column in Python?
问:
假设我有一些这样的列列表:
res = [[2],[3, 4],[0],[5]]
然后,我需要将这个零矩阵 4X4 更改为上面列表中的 1 列;例如:第一行在第 2 列中绘制 1,第二行在第 3 列和第 4 列中绘制 1,第三行由于 [0] 而没有绘制,第四行在第 5 列中绘制 1。zr
res
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
你有什么建议吗?谢谢。
答:
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
您可以尝试从 ,例如,put
numpy
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]]
评论