代码之家  ›  专栏  ›  技术社区  ›  Adam_G

嵌套数组中带浮点的点积

  •  0
  • Adam_G  · 技术社区  · 6 年前

    我尝试使用纯的基本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]
    

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

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

    我该如何更正?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Ajax1234    6 年前

    您需要遍历一个附加级别来执行乘法:

    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)))
    
        2
  •  1
  •   Silvio Mayolo    6 年前

    我怀疑你来自Matlab或者类似的语言,在这种语言中,为一维编写的东西自动地在更高的维度中工作。这是因为matlab支持所谓的 array-oriented programming . python没有这个特性,所以您必须手工遍历数组。

    map(lambda x: dot(x, listb), lista)