Вариант 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