同一方程式中变量的多个值

时间:2018-11-08 11:05:34

标签: python python-2.7

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的第一个值。之后,我想使用第二个值。我怎样才能做到这一点 ?

3 个答案:

答案 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))用尽。

Reference

  

地图功能可迭代,...)

     

...如果传递了其他可迭代参数,则函数必须   接受那么多参数,并应用于所有项目   并行迭代。

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生成器,那么最后一个非常实用。