2014-07-16 83 views
1

我有一個約400,000個數值的numpy數組,z。的z範圍從0 to 2.9在特定範圍內的Numpy數組

我想這個數組分成四個部分:

z1 = 0.0<z<=0.5 
z2 = 0.5<z<=1.0 
z3 = 1.0<z<=1.5 
z4 = 1.5<z<=2.9 

我一直在使用:

z1 = np.where(np.logical_and(z>0, z<=0.5)) 
z2 = np.where(np.logical_and(z>0.5, z<=1.0)) 

上面似乎並沒有給我z1z2在要求的範圍內(大約z1應該是一個長度100,000的數組,範圍在0<z<=0.5之間!! 我已經用長度爲100左右的簡單數組嘗試過它,它可以工作。

我在這裏做錯了什麼?或者還有另外一種將我的陣列分成四部分的方法?

回答

0

問題是np.where()返回索引。要獲得這些值,你可以這樣做:

z1 = np.take(z, np.where(np.logical_and(z>0, z<=0.5))[0]) 

等等...

這也許是更快地直接使用面膜獲得通過花哨的索引值:在

z1 = z[np.logical_and(z>0, z<=0.5)] 
+2

您您在布爾表達式中使用了'z1'的示例。我只有'z'和'z1'尚未定義。 – ThePredator

+1

它仍然給我整個'z'而不是範圍內的值 – ThePredator

+0

@Srivatsan對於我來說'np.take()'或幻想索引的解決方案......我創建'z'爲'z = np.linspace(0,2.9,1000)' –