[英]multiple values of a variable in same equation
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)
首先,我想在方程式中使用AB和C的第一個值。 之后,我想使用第二個值。 我怎樣才能做到這一點 ?
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))
。
參考 :
map ( function , iterable ,...)
...如果傳遞了其他可迭代的參數,則函數必須采用那么多參數,並且並行地將其應用於所有可迭代的項目。
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]
用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])
如果要保持功能不變,則應使用以下命令調用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生成器,那么最后一個非常實用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.