Преобразовать матрицу от 3х3 до 1х27 со значением bool - PullRequest
0 голосов
/ 02 февраля 2019

Давайте предположим, что у меня есть матрица 3x3 со значениями от 0 до 3

[[1,0,0],
 [0,3,0],
 [0,0,2]]

Мне нужно, чтобы она была преобразована в матрицу 1x27 с 0 или 1 значениями, поэтому, если значение больше 1, это будетбыть 1, иначе ноль

[1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 1. 0.]

Пока что я попробовал следующий, но это неправильно:

def convert(Matr):
  empty = np.zeros(Matr.shape[0]*Matr.shape[0]**2)
    for i in range(Matr.shape[0]):
        for j in range(Matr.shape[1]):
            if Matr[i,j] != 0:
                empty[i][((j+1)* Matr[i,j])-1] = 1

1 Ответ

0 голосов
/ 02 февраля 2019

Вы можете сделать следующее:

import numpy as np

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

encoding = np.vstack((np.zeros((1, 3)), np.eye(3)))
result = encoding[a.ravel()].flatten()

print(result)

Выход

[1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 1. 0.]

Переменная кодировка - это массив, где каждая строка соответствует коду, дляэкземпляр:

[[0. 0. 0.]
 [1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

После того, как вы создадите кодировки, выполните итерации по каждой строке с encoding[a.ravel()], выбирая кодировки для каждого значения.

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