Как преобразовать словарь ключей координат кортежа в разреженную матрицу - PullRequest
0 голосов
/ 28 ноября 2018

Я сохранил ненулевые значения разреженной матрицы в словаре.Как бы я это в реальной матрице?

def sparse_matrix(density,order):
    import random
    matrix = {}
    for i in range(density):
        matrix[(random.randint(0,order-1),
        random.randint(0,order-1))] = 1
    return matrix

1 Ответ

0 голосов
/ 28 ноября 2018

Вариант 1: Вместо сохранения значений в списке и последующего создания матрицы, вы можете напрямую создать матрицу и обновить значения в ней.Обратите внимание, что у вас может быть меньше ненулевых значений, чем в «порядке», так как randint может вернуть тот же номер снова.

Пример кода:

import random
import numpy as np
def sparse_matrix(density,order):
    #matrix = [ [0 for i in range(order)] for i in range(order)]
    matrix = np.zeros((order,order))
    for i in range(density):
        matrix[(random.randint(0,order-1))][random.randint(0,order-1)] = 1
    return matrix 

Вывод:

sparse_matrix(2,4)

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

Опция 2

Вы можете создать словарь, используя свой код, и использовать этот словарь для обновления значения в матрице.

    def sparse_matrix(density,order):
        import random
        #matrix = [ [0 for i in range(order)] for i in range(order)]
        matrix = {}
        for i in range(density):
            matrix[(random.randint(0,order-1)),(random.randint(0,order-1))] = 1
        return matrix
   #matrix of size order*order
   final_matrix = np.zeros((4,4))

   for key, value in sparse_matrix(2,4).items() :
       final_matrix[key] = value
...