2017-07-04 104 views
-6
def inner_product(v, w) : 
    for v, w in range(len(v*w)) : 


print(inner_product([1, 2, 3, 4], [5, 6, 7, 8])) 

我想乘以向量v和w。我把我的功能作为inner_product(v,w) 但是,这个句子不起作用。我该怎么办?答案必须是70使用自函数乘以两个向量列表

我搜索了最近2天,但我没有找到正确的方法。

+0

+我必须使用for,range(),len()并且错误消息是“print(inner_product([1,2,3,4],[5,6,7,8])) ^ IndentationError:预计一个缩进块“ –

+1

你的功能是不完整的。你的循环什么都不做(除非可能抛出语法错误)。另外,我怀疑'len(v * w)'是你想要的。根据我对这个问题的理解,你可能需要谷歌5秒钟的时间:len(v)'(或者等同于'len(w)') – Zinki

+0

:http://www.pradeepadiga.me/blog/2017/04/18/ python-without-use-numpy/ –

回答

0

你可以这样说:

def inner_product(v,w): 
    l = len(v) 
    mul = 0 
    for i in range(l): 
     mul += v[i] * w[i] 
    return mul 
+0

如果这有助于你! –

+0

谢谢你的回答,但是,我必须在第二句中使用'for_in range(len(_)'的形式,'range'和'len'函数必须包含在'for'中 –

2

你已经基本上2个选择:大

def inner_product(v, w) : 
    return sum(num_v * num_w for num_v, num_w in zip(v, w)) 

print(inner_product([1, 2, 3, 4], [5, 6, 7, 8])) 
# 70 
  • 使用numpy(相当快:

    1. 推倒重来列表):

      import numpy as np 
      
      def inner_product(v, w) : 
          return v.dot(w) 
      
      print(inner_product(np.array([1, 2, 3, 4]), np.array([5, 6, 7, 8]))) 
      # 70 
      

    在情况下,两个列表不是在相同的长度,第一种方法将根据短列表的长度乘以(即​​和[5, 6, 7, 8]也将输出70)。用第二种方法,numpy将提高ValueError

  • +0

    谢谢你的回答,但是我必须在第二句中使用'for_in range(len(_)'的形式,'range'和'len'函数必须包含在'for'语句中 –

    +0

    “我必须......“由谁来决定? – DeepSpace

    0

    你们很近..我会使用zip函数来同时迭代两个列表并且乘以元素,最后返回所有乘法的结果。

    def inner_product(v, w) : 
        mul = 0 
        for first, second in zip(v,w) : 
        mul += first * second 
        return mul 
    
    print(inner_product([1, 2, 3, 4], [5, 6, 7, 8])) 
    

    另一种方法是使用numpy的图书馆,你可以乘两个列表和比求和乘法表的结果:

    import numpy as np 
    
    a = np.array([1,2,3,4]) 
    b = np.array([5, 6, 7, 8]) 
    
    print(sum(a * b)) 
    

    编辑:

    那么接下来您的评论,使用​​这里是一个反向模式:

    def inner_product(v, w) : 
        mul = 0 
        for i in range(len(v)): 
        mul += v[i] * w[i] 
        return mul 
    
    print(inner_product([1, 2, 3, 4], [5, 6, 7, 8])) 
    
    +0

    谢谢你的回答。但是,我必须在第二句中使用'for_in range(len(_)'的形式。'range'和'len'函数必须包含在'for'语句中 –

    +0

    @곽성호,我在我的答案中添加了编辑部分。考虑一下这是一种反模式。 –

    +0

    非常感谢你!这真的很有帮助!我想知道'mul = 0'和'mul + = v [i] * w [i]'的意思。那么在这三句话里有什么函数“len(v)”?为什么不是'范围(len(v,w))'? –