我正在尝试使用纯的基本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'
我该如何纠正?
答案 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