A = [18.0,10.0]; B = [13.0,15.0]; C = [10.5,12.0];
这些是变量,并考虑类似函数
def hlf(A,B,C):
return A**(-1.0/2.0)-0.2*B-43+C
print "T:"
hlf(A,B,C)
首先,我想在方程式中使用A B和C的第一个值。之后,我想使用第二个值。我怎样才能做到这一点 ?
答案 0 :(得分:2)
map
+ list
注意map
可以采用多个可迭代的参数:
res = map(hlf, A, B, C)
[-34.86429773960448, -33.68377223398316]
在Python 2.7中,map
返回一个list
。在Python 3.x中,map
返回一个迭代器,因此您可以延迟迭代,也可以通过list
,即list(map(hfl, A, B, C))
用尽。
地图(功能,可迭代,...)
...如果传递了其他可迭代参数,则函数必须 接受那么多参数,并应用于所有项目 并行迭代。
zip
+列表理解您可以在列表理解中使用zip
。为了清楚起见,应避免将参数命名为与变量相同。
A = [18.0,10.0]; B = [13.0,15.0]; C = [10.5,12.0];
def hlf(x, y, z):
return x**(-1.0/2.0) - 0.2*y - 43 + z
res = [hlf(*vars) for vars in zip(A, B, C)]
[-34.86429773960448, -33.68377223398316]
答案 1 :(得分:2)
使用Numpy矢量化。最佳表现
通常最好尝试使用numpy将这种操作向量化,因为会获得最佳性能。当向量化而不是使用循环时,您将使用所有内核及其最快的解决方案。您应该使用numpy将操作向量化。像这样:
import numpy as np
A = [18.0,10.0]; B = [13.0,15.0]; C = [10.5,12.0];
a = np.array(A)
b = np.array(B)
c = np.array(C)
现在您的函数具有新的向量,例如参数:
def hlf(a_vector,b_vector,c_vector):
return a_vector**(-1.0/2.0)-0.2*b_vector-43+c_vector
最后调用向量化的新函数:
print (hlf(a_vector = a,b_vector = b,c_vector = c))
输出:
>>> array([-34.86429774, -33.68377223])
答案 2 :(得分:0)
如果您希望保持功能不变,则应使用以下命令对其进行N
次调用:
for i in range(N):
result = hlf(A[i], B[i], C[i])
print(result)
另一种有趣的方法是使用您的函数生成一个生成器:
A = [18.0,10.0]
B = [13.0,15.0]
C = [10.5,12.0];
def hlf(*args):
i=0
while i < len(args[0]):
yield args[0][i]**(-1.0/2.0) - 0.2*args[1][i] - 43 + args[2][i]
i += 1
results = hlf(A, B, C)
for r in results:
print(r)
输出:
-34.86429773960448
-33.68377223398316
如果您想练习python生成器,那么最后一个非常实用。