Умножение строк матрицы друг с другом и с другим списком

#python #arrays #multidimensional-array #matrix-multiplication

#python #массивы #многомерный-массив #матрица-умножение

Вопрос:

Я пытаюсь умножить матрицу, содержащую размеры вокселей, на список одиночных чисел (содержащий количество вокселей). Что-то вроде этого:

 a = [(1, 2, 3), (2, 3, 4)]
b = [5, 6]

hocuspocus = [1 * 2 * 3 * 5, 2 * 3 * 4 * 6] = [30, 144]
 

Поскольку мне нужно предоставить воксели в кубических миллиметрах, мне нужно умножить содержимое каждой строки матрицы друг на друга, а затем на список b. Еще не понял, как это сделать в python. У кого-нибудь есть какие-либо предложения? Спасибо.

Ответ №1:

Вы могли бы пойти на что-то вроде этого, которое использует prod() функцию для умножения всех чисел в строке и уменьшения их в одно значение, а затем for оператор понимания этого списка повторяет два списка a b и умножает их по элементам.

Python 3.7 или старше

 from functools import reduce  # Required in Python 3.
from operator import mul

def prod(iterable): # This function multiplies all numbers of a row.
    return reduce(mul, iterable, 1)
    
a = [(1, 2, 3), (2, 3, 4)]
b = [5, 6]
    
out = [prod(row) * elem for row, elem in zip(a, b)]

print(out)
 

Python 3.8

В качестве альтернативы вы можете использовать встроенную prod() функцию в math модуле.

 from math import prod
    
a = [(1, 2, 3), (2, 3, 4)]
b = [5, 6]
    
out = [prod(row) * elem for row, elem in zip(a, b)]

print(out)
 

Вывод:

 [30, 144]
 

Комментарии:

1. Вау, большое спасибо за быстрый ответ! Я так долго пытался решить эту проблему, и с вашей помощью она отлично сработала! Спасибо!