Преобразовать массив в двоичный массив - PullRequest
1 голос
/ 31 мая 2019

В настоящее время у меня есть пустой массив со следующими данными:

array([0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0,
   1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0,
   0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0,
   1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1,
   0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1,
   0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0])

Мне нужно преобразовать его в массив, который выглядит следующим образом:

array([0., 1.],
      [0., 1.],
      [1., 0.],
      [1., 0.],
      [1., 0.],
      [0., 1.],
      [1., 0.],
      [1., 0.],
      [1., 0.],
      [1., 0.],
      ...
      [0., 1.])

Первый шаг я, очевидно, представляю как преобразование в число с плавающей точкой, но я не знаю, с чего начать до следующего шага. Есть ли функция карты, которая будет хорошо работать? Лямбда? А за кругом? Я чувствую, что было бы просто, если бы у меня уже было это в другом формате массива, но я не знаю, как условно добавить измерение и затем заполнить его точно двоичной противоположностью того, что уже там. Является ли все это условным условием «если-то»? Извините, я просто новичок в Python, поэтому пока не знаю всех инструментов.

1 Ответ

2 голосов
/ 31 мая 2019

Вы можете использовать расширенную индексацию в соответствующем шаблоне:

small_example = np.array([1,0,0,1,1,1,0,1])
(1-np.eye(2))[small_example]
# array([[1., 0.],
#        [0., 1.],
#        [0., 1.],
#        [1., 0.],
#        [1., 0.],
#        [1., 0.],
#        [0., 1.],
#        [1., 0.]])

Та же идея может быть реализована с использованием np.where:

np.where(small_example[:,None], *np.eye(2))
# array([[1., 0.],
#        [0., 1.],
#        [0., 1.],
#        [1., 0.],
#        [1., 0.],
#        [1., 0.],
#        [0., 1.],
#        [1., 0.]])

Более прямой подход, показывающий, каксоздать столбец с векторными строками, как транслировать их вместе и как разыграть dtype:

(np.c_[small_example]^np.r_[:2]).astype(float)
# array([[1., 0.],
#        [0., 1.],
#        [0., 1.],
#        [1., 0.],
#        [1., 0.],
#        [1., 0.],
#        [0., 1.],
#        [1., 0.]])

Мы также можем составить столбец с входными данными и их «отрицательными»;мы используем 1.0, чтобы вызвать продвижение типа:

np.c_[small_example,1.0-small_example]
# array([[1., 0.],
#        [0., 1.],
#        [0., 1.],
#        [1., 0.],
#        [1., 0.],
#        [1., 0.],
#        [0., 1.],
#        [1., 0.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...