Бинаризировать список со списками внутри - PullRequest
2 голосов
/ 07 июля 2019

Я пытаюсь преобразовать список в двоичную форму (сохранить 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

Есть лиспособ сделать это не с двумя петлями?Я попробовал это, и это занимает много времени и преобразует список в длину >> 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

Большое спасибо!

1 Ответ

4 голосов
/ 07 июля 2019

вы можете использовать тот факт, что int(bool(x)) равен 0 для 0 и 1 для чего-либо еще:

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

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

print(d)

Выход:

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

Если вы уже используете numpy (как подсказывает ваша собственная попытка решения), вы можете просто использовать np.where следующим образом:

import numpy as np

d = np.array([[0, 1, 2], [3, 0, 4], [5, 6, 0]])
d = np.where(d == 0, 0, 1)

print(d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...