如何在不使用 NumPy 或 .dot 的情况下在 python 中点积一维和二维列表?

How to dot product 1D and 2D lists in python without using NumPy or .dot?

对于给定的二维和一维列表,我必须对它们进行点积。但是我必须在不使用 .dot.

的情况下计算它们

例如,我想制作这些列表

matrix_A = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31]]
vector_x = [0, 1, 2, 3]

到此输出

result_list = [ 14  38  62  86 110 134 158 182]

如何在 python 中仅使用列表(不使用 NumPy array.dot)?

您可以使用带有嵌套 for 循环的列表理解。

matrix_A = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31]]
vector_x = [0, 1, 2, 3]

result_list = [sum(a*b for a,b in zip(row, vector_x)) for row in matrix_A]

print(result_list)

输出:

[14, 38, 62, 86, 110, 134, 158, 182]

编辑:删除了@fshabashev 评论后的列表理解中的方括号。

如果你不介意使用 numpy,这是一个解决方案

import numpy as np

matrix_A = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31]]
vector_x = [0, 1, 2, 3]

res = np.sum(np.array(matrix_A) * np.array(vector_x), axis=1)
print(res)