Python 嵌套数组中带浮点数的点积
我正在尝试使用纯的基本python(无导入或第三方库)实现一个点积函数。对于整数数组,我知道我可以使用以下函数:Python 嵌套数组中带浮点数的点积,python,linear-algebra,Python,Linear Algebra,我正在尝试使用纯的基本python(无导入或第三方库)实现一个点积函数。对于整数数组,我知道我可以使用以下函数: 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] 当我尝试打印(dot(lista,listb))时,我得到: TypeError:
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]
当我尝试打印(dot(lista,listb))
时,我得到:
TypeError: can't multiply sequence by non-int of type 'list'
如何更正此问题?您需要遍历一个附加级别来执行乘法:
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]
或者,使用带有映射的函数
:
def dot(m, n = [-0.75, 2.75]):
return sum(a*b for a, b in zip(m, n))
print(list(map(dot, lista)))
您需要遍历一个附加级别来执行乘法:
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]
或者,使用带有映射的函数
:
def dot(m, n = [-0.75, 2.75]):
return sum(a*b for a, b in zip(m, n))
print(list(map(dot, lista)))
我怀疑你来自Matlab或类似的语言,在那里为一维编写的东西自动在更高的维中工作。这是因为Matlab支持所谓的。Python没有此功能,因此必须手动遍历数组
map(lambda x: dot(x, listb), lista)
我怀疑你来自Matlab或类似的语言,在那里为一维编写的东西自动在更高的维中工作。这是因为Matlab支持所谓的。Python没有此功能,因此必须手动遍历数组
map(lambda x: dot(x, listb), lista)
这根本不是问题所在。。。问题是您的列表中有一个是嵌套的。为什么要尝试将二维数组与一维数组进行点积?输出的代价是什么?对于输出,我希望[12.89,-1.83,-0.42]我建议退一步,了解点积是什么以及如何计算。两个矩阵之间的任何非平凡点积都需要3个循环。这根本不是问题所在。。。问题是您的列表中有一个是嵌套的。为什么要尝试将二维数组与一维数组进行点积?输出的代价是什么?对于输出,我希望[12.89,-1.83,-0.42]我建议退一步,了解点积是什么以及如何计算。两个矩阵之间的任何非平凡点积都需要3个循环。谢谢!既然大家都讨厌我的问题,我就把它删掉。但是谢谢你@不,你的问题很好。用户只是指出,一个真正的点产品需要比您原来的代码应用更多的逻辑。@Adam_G我可能建议重新编写标题和问题的一部分,以便更准确地反映问题的实质。我怀疑有些人投了反对票,因为他们发现问题根本不是关于浮点值的。啊,谢谢!那一连串的反对票让人很沮丧:-)谢谢!既然大家都讨厌我的问题,我就把它删掉。但是谢谢你@不,你的问题很好。用户只是指出,一个真正的点产品需要比您原来的代码应用更多的逻辑。@Adam_G我可能建议重新编写标题和问题的一部分,以便更准确地反映问题的实质。我怀疑有些人投了反对票,因为他们发现问题根本不是关于浮点值的。啊,谢谢!这一连串的反对票非常令人沮丧:——)