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

3xiyfsfu  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(94)

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

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

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

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

你有什么建议吗?谢谢

dsekswqp

dsekswqp1#

这就是你要做的如果它发现[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。这总是假的。

a11xaf1n

a11xaf1n2#

您可以从numpy尝试put,例如,

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]]

相关问题