嵌套数组中带有浮点数的点积

时间:2018-05-27 19:52:21

标签: python linear-algebra

我正在尝试使用纯的基本python(无导入或第三方库)实现点积函数。对于一组int,我知道我可以使用下面的函数:

def dot(v1, v2):
    return sum(x*y for x,y in zip(v1,v2))

但是,我的数组是浮点数:

lista = [[2.62, -3.97], [-2.32, -1.30], [-1.09, -0.45]]
listb = [-0.75, 2.75]

当我尝试print(dot(lista, listb))时,我得到:

TypeError: can't multiply sequence by non-int of type 'list'

我该如何纠正?

2 个答案:

答案 0 :(得分:1)

您需要遍历一个额外的级别来执行乘法运算:

lista = [[2.62, -3.97], [-2.32, -1.30], [-1.09, -0.45]]
listb = [-0.75, 2.75]
final_results = [sum(a*b for a, b in zip(listb, i)) for i in lista]

输出:

[-12.8825, -1.8350000000000004, -0.41999999999999993]

或者,使用map的函数:

def dot(m, n = [-0.75, 2.75]):
  return sum(a*b for a, b in zip(m, n))

print(list(map(dot, lista)))

答案 1 :(得分:1)

我怀疑你来自Matlab或类似的语言,为一个维度编写的东西在更高维度上自动运行。这是因为Matlab支持所谓的array-oriented programming。 Python没有这个功能,所以你必须手动遍历数组。

EXEC InsertEmployeerecord