Нулевая матрица с постоянной диагональю, такой же формы, что и другая матрица - PullRequest
12 голосов
/ 02 мая 2011

Мне интересно, есть ли простой способ умножить числовую матрицу на скаляр?По сути, я хочу, чтобы все значения умножались на константу 40. Это была бы матрица nxn с 40 по диагонали, но мне интересно, есть ли более простая функция для масштабирования этой матрицы.Или как мне сделать матрицу с такой же формой, как у другой матрицы, и заполнить ее диагональ?

Извините, если это кажется немного базовым, но по какой-то причине я не смог найти это в документе.

Ответы [ 2 ]

13 голосов
/ 02 мая 2011

Если вам нужна матрица с 40 на диагонали и нулями везде, вы можете использовать функцию NumPy fill_diagonal() на матрице нулей.Таким образом, вы можете напрямую сделать:

N = 100; value = 40
b = np.zeros((N, N))
np.fill_diagonal(b, value)

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

Если вы хотите, чтобы диагональная матрица b была такого же размера, как другая матрица a, вы можете использоватьследующий ярлык (нет необходимости в явном размере N):

b = np.zeros_like(a)
np.fill_diagonal(b, value)
9 голосов
/ 02 мая 2011

Легко:

N = 100
a = np.eye(N)  # Diagonal Identity 100x100 array
b = 40*a  # Multiply by a scalar

Если вы на самом деле хотите, чтобы матрица с массивностью сравнивалась с массивом, вы можете вместо этого сделать a = np.asmatrix(np.eye(N)). Но в целом * является поэлементным умножением в numpy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...