其他人回答假設你想申請一個計算或其他取決於是否所有/的x
任何值符合相應的條件:如您會重寫你的if語句。我會做一個不同的假設 - 你想分別應用f
到x
的每個元素。通過元素
應用元素,我得到:
In [226]: x=np.linspace(0,1,20)
In [227]: [f(z,d,h,L) for z in x]
Out[227]:
[0.0,
0.0016447368421052631,
0.0032894736842105261,
0.0049342105263157892,
0.89586497157981526,
0.78739098364212268,
0.6789169957044302,
0.57044300776673762,
0.46196901982904509,
0.35349503189135251,
0.24502104395365998,
0.13654705601596731,
0.028073068078274897,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0]
的矢量相當於:
In [238]: I = (0<=x) & (x<d)
In [239]: J=(d<=x) & (x<=L)
In [240]: out=np.zeros_like(x)
In [241]: out[I]=h*(x[I]/d)
In [242]: out[J]=(L-x[J])/(L-d)
In [243]: out
Out[243]:
array([ 0. , 0.00164474, 0.00328947, 0.00493421, 0.89586497,
0.78739098, 0.678917 , 0.57044301, 0.46196902, 0.35349503,
0.24502104, 0.13654706, 0.02807307, 0. , 0. ,
0. , 0. , 0. , 0. , 0. ])
我讓你打包,作爲一個功能。
隨着給出的參數(包括完整x
),np.all(I)
和np.all(J)
都是False
,這意味着f
如果應用到x
作爲一個整體將返回0.0
。
def f(x, d, h, L):
I = (0<=x) & (x<d)
J=(d<=x) & (x<=L)
out=np.zeros_like(x)
out[I]=h*(x[I]/d)
out[J]=(L-x[J])/(L-d)
return out
'x'是一個數組。如果任何/所有'x'落在一個範圍內,你想'f'做一件事情,如果它們不屬於'x',那麼它們會不同?或者你是否希望它用一個範圍內的'x'值做一件事,另一件'x'值是不同的東西?換句話說'if'測試是否適用於整個'x'或單個元素? – hpaulj
提出我的問題的另一種方法 - 如果您單獨將'x'的元素傳遞給它,函數是否正常工作? – hpaulj