вы хотите использовать 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
имеет необязательный параметр для ограничения повторений).
person
Jean-François Fabre
schedule
19.11.2018