одномерный кортеж к двумерному массиву NumPy - PullRequest
3 голосов
/ 12 июля 2019

Преобразовать кортеж в матрицу Numpy с указанными ниже условиями:

  • Форма массива должна быть len(tuple) x len(tuple), то есть квадратная матрица.
  • Элементы в массиве в месте, указанном (index of the element in the tuple, the value of the element in the tuple), должны быть равны единице.

Например, у меня есть случайный кортеж, как показано ниже:

# index means row ,value means col
(2,0,1)

Я использую два цикла дляизмените этот кортеж на массив Numpy:

def get_np_represent(result):
    two_D = []
    for row in range(len(result)):
        one_D = []
        for col in range(len(result)):
            if result[row] == col:
                one_D.append(1)
            else:
                one_D.append(0)
        two_D.append(one_D)
    return np.array(two_D)

output:

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

Но у меня есть 10 000 000 таких кортежей, есть ли более быстрый способ?

Ответы [ 2 ]

3 голосов
/ 12 июля 2019

Например (настройка из Ke)

t = (2, 0, 1)
x = np.zeros([len(t),len(t)])
x[np.arange(len(x)),t]=1
x
Out[145]: 
array([[0., 0., 1.],
       [1., 0., 0.],
       [0., 1., 0.]])
3 голосов
/ 12 июля 2019

Как то так?Манипулировать матрицей довольно быстро, чем для цикла.

import numpy as np

t = (2, 0, 1)
x = np.zeros([len(t),len(t)])

for i,v in enumerate(t):
    x[i, v] = 1

print(x)

Выводы:

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