#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.]])