for a in self.weights
a будет не индексами, а элементами списка. В твоём случае - массивами numpy. Аналогично
for b in a:
будет не индексами строк массива, а самими строками
for c in b:
будет не индексами столбцов, а значениями ячеек. Так что
self.weights[a][b][c]
получит вместо чисел-индексов массивы и сойдёт с ума.
А вообще, то что ты пытаешься сделать, делается тривиальнейше.
x = np.randint(-1000, 1000, size = (2, 3), dtype=np.float32) # массив случайных чисел, две строки, три столбца
x /= 100.0 # делим поэлементно на сто
В список завернёшь сам, хотя я не понимаю почему список, а не еще одно измерение в массиве.