Задача на умножение матриц с использованием NumPy

Всем привет, изучаю возможности NumPy. Не пойму, правда, тут моя математика просела окончательно или понимание Python.

Введите через пробел 16 чисел, создайте из них вектор. Преобразуйте вектор в матрицу А размера 4 на 4 любым способом. Найдите натуральное число x из диапазона [1, 9], для которого матрица вида

x 0 0 0

0 x 0 0

0 0 x 0

0 0 0 x

при умножении на матрицу A увеличит всё её элементы в 3 раза. Выведите на экран произведение матриц.

Мое начало кода:

import numpy as np

data=input('Enter 16 numbers using space: ')
lst=list(map(int, data.split(' ')))

a=np.array(lst).reshape(4,4)
b=a*3

Дальше думала сделать что-то вроде деления матриц, но запуталась + в ответе матрица далеко не диагональная получается:

from numpy.linalg import inv
b_inv=inv(b)

c=a*b_inv
print(c)

Помогите разобраться, пожалуйста)


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Значение x отыскивается в уме и не зависит от другой матрицы. Оператор * в NumPy означает поэлементное умножение массивов. Вам нужен оператор @.

import numpy as np


a = np.array(range(16)).reshape(4, 4)
print(a)

b = 3 * np.eye(4)
print(b)

c = a @ b
print(c)
$ python matrices.py
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[3. 0. 0. 0.]
 [0. 3. 0. 0.]
 [0. 0. 3. 0.]
 [0. 0. 0. 3.]]
[[ 0.  3.  6.  9.]
 [12. 15. 18. 21.]
 [24. 27. 30. 33.]
 [36. 39. 42. 45.]]
→ Ссылка