Как умножать диагональные элементы друг на друга с помощью numpy?

#python #numpy #matrix

#python #numpy #матрица

Вопрос:

Для целей этого упражнения давайте рассмотрим матрицу, в которой элемент m_{i, j} задается правилом m_{i, j} = i*j if i == j и 0 else.

Существует ли простой «numpy» способ вычисления такой матрицы без необходимости прибегать к if операторам, проверяющим индексы?

Комментарии:

1. m = np.diag(np.square(np.arange(N))) для NxN матрицы?

2. Что вы имеете в виду под вычислением такой матрицы ? Заголовок предполагает, что вы хотите произведение всех элементов, размещенных по диагонали, однако matrix-multiplication тег предполагает, что вы хотите умножать матрицу на матрицу. Пожалуйста, добавьте, если возможно, простой пример с матрицей и желаемым результатом.

3. Извините за использование запутанных тегов… изначально у меня была мысль, что возможный подход включает умножение матрицы.. я считаю, что должно быть ясно, как будет выглядеть матрица, учитывая приведенное выше описание.

Ответ №1:

Вы можете использовать функцию numpy diag для построения диагональной матрицы, если зададите ей предполагаемую диагональ в виде одномерного массива в качестве входных данных.

Итак, вам просто нужно создать это, например, [i**2 for i in range (N)] с N размером матрицы.

Комментарии:

1. Я думаю, это решение мне нравится больше всего, потому что оно дает возможность при необходимости оперировать значениями в пределах понимания списка

Ответ №2:

Вы могли бы использовать идентификационную матрицу, заданную numpy.identity(n) , а затем умножить ее на n размерный вектор.

Ответ №3:

Предполагая, что у вас есть квадратная матрица, вы можете сделать это:

 import numpy as np

ary = np.zeros((4, 4))
_ = [ary.__setitem__((i, i), i**2) for i in range(ary.shape[0])]
print(ary)
# array([[0., 0., 0., 0.],
#        [0., 1., 0., 0.],
#        [0., 0., 4., 0.],
#        [0., 0., 0., 9.]])