将包含列表的列表二值化

Tac*_*o22 2 python numpy list python-3.x

我正在尝试对列表进行二值化(将 0 保留为 0,并将任何其他数字转换为 1),例如(格式示例,实际列表更长):

d = [[0,0,192],[0,0,0,0,56],[...],...]

With len(d) = 23473 and len(d[n])=300, so kind of a lot of data

Run Code Online (Sandbox Code Playgroud)

有没有办法不用两个循环来做到这一点?我试过了,它需要很多时间并将列表转换为长度>>23473

#for i in np.linspace(0,len(d)-1,len(d),dtype=int):
#    for k in np.linspace(0,len(d[i])-1,len(d[i]),dtype=int):
#        if d[i][k] != 0:
#            d[i][k] = 1
#        else:
#            d[i][k] = 0
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Ada*_*Er8 5

你可以使用一个事实,即int(bool(x))001为别的:

d = [[0, 0, 192], [0, 0, 0, 0, 56]]

d = [[int(bool(x)) for x in l] for l in d]

print(d)
Run Code Online (Sandbox Code Playgroud)

输出:

[[0, 0, 1], [0, 0, 0, 0, 1]]
Run Code Online (Sandbox Code Playgroud)

如果您已经在使用 numpy(正如您自己尝试的解决方案所建议的那样),您可以np.where像这样使用:

[[0, 0, 1], [0, 0, 0, 0, 1]]
Run Code Online (Sandbox Code Playgroud)