使用自函数乘以两个向量列表
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天,但我没有找到正确的方法。
你可以这样说:
def inner_product(v,w):
l = len(v)
mul = 0
for i in range(l):
mul += v[i] * w[i]
return mul
如果这有助于你! –
谢谢你的回答,但是,我必须在第二句中使用'for_in range(len(_)'的形式,'range'和'len'函数必须包含在'for'中 –
你已经基本上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
(相当快:
-
推倒重来列表):
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
。
谢谢你的回答,但是我必须在第二句中使用'for_in range(len(_)'的形式,'range'和'len'函数必须包含在'for'语句中 –
“我必须......“由谁来决定? – DeepSpace
你们很近..我会使用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]))
谢谢你的回答。但是,我必须在第二句中使用'for_in range(len(_)'的形式。'range'和'len'函数必须包含在'for'语句中 –
@곽성호,我在我的答案中添加了编辑部分。考虑一下这是一种反模式。 –
非常感谢你!这真的很有帮助!我想知道'mul = 0'和'mul + = v [i] * w [i]'的意思。那么在这三句话里有什么函数“len(v)”?为什么不是'范围(len(v,w))'? –
+我必须使用for,range(),len()并且错误消息是“print(inner_product([1,2,3,4],[5,6,7,8])) ^ IndentationError:预计一个缩进块“ –
你的功能是不完整的。你的循环什么都不做(除非可能抛出语法错误)。另外,我怀疑'len(v * w)'是你想要的。根据我对这个问题的理解,你可能需要谷歌5秒钟的时间:len(v)'(或者等同于'len(w)') – Zinki
:http://www.pradeepadiga.me/blog/2017/04/18/ python-without-use-numpy/ –