Python Умножение матрицы - PullRequest
1 голос
/ 17 июня 2020

Я использую программу, которая генерирует две матрицы одинаковой формы, которые отличаются от 1 до 11 строк и всегда имеют одинаковое количество столбцов. Мне нужно умножить эти матричные клетки на ячейку. например, если у меня:

([1 1 1];[2 2 2];[3 3 3]) * ([1 2 3]; [4 5 6]; [2 4 6]) = ([1 2 3]; [8 10 12]; [6 12 9])

У меня проблемы с использованием A * A Может ли кто-нибудь мне помочь? Большое спасибо

Ответы [ 3 ]

2 голосов
/ 17 июня 2020

Вы можете попробовать это:

arr1=[[1,1,1],[2,2,2],[3,3,3]]
arr2 = [[1,2,3],[4,5,6],[2,4,6]]

multi = lambda a,b: [[p[i]*q[i] for i in range(len(p))] for p, q in zip(a,b)]
print(multi(arr1,arr2))

Или используйте numpy в качестве ответа @ BrennenSprimont:

import numpy as np
first = np.array([[1,1,1],[2,2,2],[3,3,3]])
seco = np.array([[1,2,3],[4,5,6],[2,4,6]])

print(first*seco) 
0 голосов
/ 22 июня 2020

Спасибо за помощь. Я искал поэлементное умножение и обнаружил, что для этого есть команда numpy. np.multiply

0 голосов
/ 17 июня 2020

Во многих контекстах математики определили * для матриц как обозначение «скалярного произведения» линейной алгебры. Чтобы выполнить "умножение по элементам / ячейкам", вам нужно использовать numpy.multiply или пару для циклов.

С numpy python3 -m pip install numpy

# EDIT: Don't use numpy.matrix, they are deprecated and will eventually be removed.
# Use numpy.array as seen in @MrNobody33's answer.
# left_matrix = numpy.matrix("1 1 1; 2 2 2; 3 3 3")
# right_matrix = numpy.matrix("1 2 3; 4 5 6; 7 8 9")
left_matrix = numpy.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])
right_matrix = numpy.array([[1, 2, 3], [4, 5, 6], [2, 4, 6]])
result_matrix = numpy.multiply(left_matrix, right_matrix)
# Use * or numpy.dot for the linear algebra matrix multiplication.
print(result_matrix)

Без numpy.

left_matrix = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
right_matrix = [[1, 2, 3], [4, 5, 6], [2, 4, 6]]
result_matrix = []
for i in range(len(left_matrix)):
    result_matrix.append([])
    for j in range(len(left_matrix[0])):
        cell_result = left_matrix[i][j] * right_matrix[i][j]
        result_matrix[i].append(cell_result)
print(result_matrix)
...