Кaк вставить в матрицу нулей на случайные места целые числа без повторений?
Как вставить в матрицу нулей matrix_zero на случайные места все целые числа от 1 до N так, чтобы они не повторялись.
Пока написал вот такой код:
i = 1
matrix_zero = np.zeros((5, 5))
print(matrix_zero)
N = # некое целое число
while np.count_nonzero(matrix_zero) < N:
matrix_zero[random.randint(0, 4)][random.randint(0, 4)] = i
i += 1
Как его дополнить до правильного?
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Я бы сделал так:
import numpy as np
n = 5
k = 9 #len(aliens)
matrix_zero = np.zeros(n * n, dtype=np.int)
matrix_zero[:k] = range(1, k + 1)
np.random.shuffle(matrix_zero)
matrix_zero = matrix_zero.reshape((n, n))
print(matrix_zero)
[[0 9 4 0 0]
[3 0 0 0 0]
[0 7 0 6 0]
[0 0 5 1 8]
[0 0 2 0 0]]
Автор решения: MaxU
→ Ссылка
In [42]: m = np.zeros((5, 5))
In [43]: N = 8
In [44]: m[np.unravel_index(np.random.choice(np.arange(np.prod(m.shape)),
size=N,
replace=False),
m.shape)] = np.arange(1, N+1)
результат:
In [45]: m
Out[45]:
array([[0., 2., 0., 0., 0.],
[0., 4., 0., 0., 6.],
[0., 5., 0., 0., 1.],
[3., 0., 0., 0., 0.],
[0., 8., 0., 0., 7.]])