Ваш первый порт вызова должен быть документацией , который объясняет это разумно ясно:
Брошено, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива.
Так, например:
int[] array = new int[5]; int boom = array[10]; // Throws the exception
Как избежать этого. ., не делайте этого. Будьте осторожны с вашими индексами массива.
Одной из проблем, с которыми иногда сталкиваются люди, является то, что массивы 1-индексируются, например
int[] array = new int[5]; // ... populate the array here ... for (int index = 1; index <= array.length; index++) { System.out.println(array[index]); }
Это пропустит первый элемент (индекс 0 ) и выдают исключение, когда индекс равен 5. Действующие индексы здесь 0-4 включительно. Правильный, идиоматический оператор
for
здесь будет:for (int index = 0; index < array.length; index++)
(Предполагается, что вы нуждаетесь в индексе, конечно. Если вы можете использовать расширенный для цикла, сделайте это.)
Вы сказали, что A
является диагональной матрицей из случайного вектора:
A = np.diagflat(np.random.randint(10, size=100))
И B
является лапласиан матрицы, ассоциированной с графиком:
R = nx.grid_graph(dim=[10,10])
B = nx.laplacian_matrix(R)
Матрица B
является разреженной матрицей , и ее необходимо преобразовать в массив numpy, если вы хотите видеть как таковой, например, для отладки, но если ваш код нужно масштабировать, вы должны держать его как разреженный.
Тогда продукт np.dot
:
product = A.dot(B.toarray())
Вы также можете пойти с нотой B.A
Я, хотя это была путаница в этой ситуации:
product = A.dot(B.A)
С product
:
array([[16, -8, 0, ..., 0, 0, 0],
[-3, 9, -3, ..., 0, 0, 0],
[ 0, -1, 3, ..., 0, 0, 0],
...,
[ 0, 0, 0, ..., 27, -9, 0],
[ 0, 0, 0, ..., 0, 0, 0],
[ 0, 0, 0, ..., 0, -4, 8]], dtype=int64)