вы хотите использовать itertools.cycle
, а не repeat
. Последний повторяет элемент (список), удачи, устанавливая его в значение, особенно если вы форсируете итерацию (поскольку она выполняется вечно)
Я бы создал ссылку на cycle
объект вне цикла и назначил бы значение для диагонали, повторяя его вручную (единственный правильный способ с cycle
). Также обратите внимание, что ваш цикл range
был неправильным. a.shape[0]
- это размерность, нет необходимости len
import numpy as np,itertools
a = np.zeros((10,10))
b = [1, 2, 3, 4, 5]
iterator = itertools.cycle(b)
for i in range(a.shape[0]):
a[i, i] = next(iterator)
результат:
>>> a
array([[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 2., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 3., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 4., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 5., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 2., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 3., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 4., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.]])
Поскольку они зацикливаются навсегда, cycle
и repeat
не должны использоваться в контексте принудительной итерации (однако, repeat
имеет необязательный параметр для ограничения повторов).