проблемы с результатом np.dot в умножающихся матрицах

Ваш первый порт вызова должен быть документацией , который объясняет это разумно ясно:

Брошено, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива.

Так, например:

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++)

(Предполагается, что вы нуждаетесь в индексе, конечно. Если вы можете использовать расширенный для цикла, сделайте это.)

0
задан Luca Cappelletti 13 July 2018 в 14:30
поделиться

1 ответ

Вы сказали, что 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)
0
ответ дан Luca Cappelletti 17 August 2018 в 12:38
поделиться
  • 1
    Я сожалею, что не указал, как я создал B: я изучаю график, поэтому я создаю граф, используя библиотеку networkx, как R = nx.grid_graph (dim = [10,10]), тогда я получаю матрицу B, поскольку она лапласиан: B = nx.laplacian_matrix (R), где лапласианная матрица является полуопределенной положительной и симметричной матрицей – Sofia Farina 13 July 2018 в 14:30
  • 2
    Я обновил ответ. – Luca Cappelletti 13 July 2018 в 14:38
  • 3
    Оооо! Спасибо! Отлично, теперь я понимаю! – Sofia Farina 13 July 2018 в 14:46
Другие вопросы по тегам:

Похожие вопросы: