Как создать несколько столбцов списка логических значений из заданного списка целых чисел в фитоне? - PullRequest
0 голосов
/ 26 мая 2018

Я новичок в Python.Я хочу сделать следующее.

Ввод: список целых чисел размером n .Каждое целое число находится в диапазоне от 0 до 3.

Вывод: многостолбцовый (4 столбца в данном случае в виде целочисленного диапазона в 0-3 = 4) числовой список размером n ,Каждая строка нового списка будет иметь столбец, соответствующий целочисленному значению входного списка как True, а остальные столбцы как False.

Например, входной список: [0, 3, 2, 1, 1, 2], размер = 6, каждое целое число находится в диапазоне 0-3

Список вывода:

Row 0: True  False  False  False
Row 1: False False  False  True
Row 2: False False  True   False
Row 3: False True   False  False
Row 4: False True   False  False
Row 5: False False  True   False

Теперь я могу начать с 4 столбцов.Перейдите через список ввода и создайте его следующим образом:

output_columns[].
for i in Input list:
    output_column[i] = True
Create an output numpy list with output columns

Это лучший способ сделать это в Python?Специально для создания списка numy в качестве вывода.

Если да, как объединить output_columns [] в конце, чтобы создать бесчисленный многомерный список с каждым измерением в виде столбца output_columns.

Если нет, то что будет лучше (чаще всегоэффективный способ) сделать это в Python?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Это лучший способ сделать это в Python?

Нет, более Pythonic и, вероятно, лучший способ - использовать простое сравнение вещания следующим образом:

In [196]: a = np.array([0, 3, 2, 1, 1, 2])

In [197]: r = list(range(0, 4))

In [198]: a[:,None] == r
Out[198]: 
array([[ True, False, False, False],
       [False, False, False,  True],
       [False, False,  True, False],
       [False,  True, False, False],
       [False,  True, False, False],
       [False, False,  True, False]])
0 голосов
/ 26 мая 2018

Вы создаете так называемый вектор с одним горячим током (каждая строка в матрице является вектором с одним горячим током, означающим, что только одно значение является истинным).

mylist = [0, 3, 2, 1, 1, 2]
one_hot = np.zeros((len(mylist), 4), dtype=np.bool)
for i, v in enumerate(mylist):
    one_hot[i, v] = True

Выход

array([[ True, False, False, False],
       [False, False, False,  True],
       [False, False,  True, False],
       [False,  True, False, False],
       [False,  True, False, False],
       [False, False,  True, False]], dtype=bool)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...