Задача на умножение матриц с использованием 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 шт):
Значение 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.]]