矩阵行彼此相乘以及与另一个列表相乘

Multiplication of matrix rows with each other and with another list

我正在尝试将包含体素大小的矩阵与单个数字列表(包含体素数量)相乘。像这样:

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

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

因为我需要提供以立方毫米为单位的体素,所以我需要将每个矩阵行的内容相互相乘,然后与列表 b 相乘。在 python 中还没有想出如何做到这一点。有没有人有什么建议?谢谢

你可以做这样的事情,它使用 prod() 函数将一行中的所有数字相乘并将它们减少为一个值,然后是此列表理解的 for 语句迭代两个列表 ab 并将它们按元素相乘。

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+

或者,您可以使用 math 模块中的原生 prod() 函数。

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]