2016-09-03 55 views
2

我需要使用numpy使用多個條件。numpy np.其中多個條件

我想這個代碼,似乎工作。

我的問題是:還有另一種可以做同樣工作的方法嗎?

Mur=np.array([200,246,372])*pq.kN*pq.m 
Mumax=np.array([1400,600,700])*pq.kN*pq.m 
Mu=np.array([100,500,2000])*pq.kN*pq.m 
Acreq=np.where(Mu<Mur,0,"zero") 
Acreq=np.where(((Mur<Mu)&(Mu<Mumax)),45,Acreq) 
Acreq=np.where(Mu>Mumax,60,Acreq) 
Print(Acreq) 
['0' '45' '60'] 
+0

目前尚不清楚你想要達到的目的。你能提供一個樣本數據集和所需的數據集嗎?在你的代碼中'pq.kN'和'pq.m'沒有被定義,所以很難理解你的輸入數據集是什麼。 PS是否使用Pandas模塊作爲選項? – MaxU

+0

Hi Max,pq.kN和pq.m是包裝「數量」中的單位。我試圖用以下條件製作一個「if」和「else if」: 如果Mu如果Mu> Mumaz ---->「z值」如果Mu 「y值」 「 – Eduardo

+0

熊貓可以很容易地完成它 - 它會成爲你的選擇嗎? – MaxU

回答

3

與此開始:

Mur = np.array([200,246,372])*3*5 
Mumax = np.array([1400,600,700])*3*5 
Mu  = np.array([100,500,2000])*3*5 
Acreq = np.where(Mu<Mur,0,"zero") 
Acreq = np.where((Mur<Mu)&(Mu<Mumax),45,Acreq) 
Acreq = np.where(Mu>Mumax,60,Acreq) 

print(Acreq) 

['0' '45' '60'] 

試試這個:

conditions = [Mu<Mur, (Mur<Mu)&(Mu<Mumax), Mu>Mumax ] 
choices  = [ 0, 45, 60 ] 
Acreq  = np.select(conditions, choices, default='zero') 
print(Acreq) 


['0' '45' '60'] 

這也適用於:

np.where((Mur<Mu)&(Mu<Mumax),45,np.where(Mu>Mumax,60,np.where(Mu<Mur,0,"zero"))) 
+0

優秀!謝謝! – Eduardo

+0

看起來很有希望。如何處理:Mur,Mumax,Mu = [53,39,50]'? – Divakar

+0

如果你使用'Mur,Mumax,Mu = [53,39,50]'作爲輸入並且嘗試原始代碼,然後嘗試你的代碼,他們會給出不同的結果。 – Divakar

1

可以使用熊貓的pd.cut()方法:

生成隨機整數系列:

In [162]: import pandas as pd 

In [163]: s = pd.Series(np.random.randint(-3,10, 10)) 

In [164]: s 
Out[164]: 
0 6 
1 -3 
2 6 
3 6 
4 7 
5 7 
6 3 
7 -2 
8 9 
9 1 
dtype: int32 

他們分類:

In [165]: pd.cut(s, bins=[-np.inf, 2, 5, np.inf], labels=['0', '45', '60']) 
Out[165]: 
0 60 
1  0 
2 60 
3 60 
4 60 
5 60 
6 45 
7  0 
8 60 
9  0 
dtype: category 
Categories (3, object): [0 < 45 < 60] 
+0

謝謝!我會嘗試這種方法 – Eduardo