-
holdtom
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 + zres = [hlf(*vars) for vars in zip(A, B, C)][-34.86429773960448, -33.68377223398316]
-
一只斗牛犬
使用 Numpy 进行矢量化。最佳表现通常最好尝试使用 numpy 对此类操作进行矢量化,因为可以获得最佳性能结果。当您改为使用循环进行矢量化时,您正在使用所有内核,这是最快的解决方案。您应该使用 numpy 对操作进行矢量化。像这样的东西:import numpy as npA = [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])
-
交互式爱情
如果你想保持你的功能不变,你应该用以下方式调用它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 += 1results = hlf(A, B, C)for r in results: print(r)输出:-34.86429773960448-33.68377223398316如果你想练习 python 生成器,最后一个是相当有教育意义的。