簡體   English   中英

同一方程式中變量的多個值

[英]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))

參考

mapfunctioniterable ,...)

...如果傳遞了其他可迭代的參數,則函數必須采用那么多參數,並且並行地將其應用於所有可迭代的項目。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM