2013-07-19 34 views
1

我有與空氣的壓力值中的形式的三維陣列:numpy.searchsorted在多維數組

[[[1000 1010] 
    [1005 990]] 

[[950 960] 
[955 940]] 

[[900 910] 
[905 890]]] 

的結構表示在不同水平的壓力,所以在2-d的每個元素是爲每一層訂購。

我想知道在哪個級別的壓力950是每個2d元素,得到一個二維數組與每個元素的水平指數。

在1-d陣列狀

a = [890, 940, 990] 

我會使用

a.searchsorted(950) 

和結果將是2,這表明950將去在第三位置。

是否有一種方法可以一次完成所有我的數組,而無需爲每個二維元素執行此操作?

+0

我不完全明白你在做什麼。如果你用一個單一的(m,n)壓力值陣列來對應一個電平,你是否說你想要在排序值的((m * n))向量中爲值「v」級別,例如'np.sort(A [0,:,:]。平).searchsorted(ⅴ)'?那麼你只是想爲每個級別做同樣的事情? –

+0

好吧,我有多個'(m,n)'陣列,每一層都有一個陣列。我想知道'(m,n)'中的每個元素的值是多少。即對於元素[1] [1],值950將在層0和層1之間。 –

+0

我明白了,所以對於給定點'A [:,i,j]壓力值在水平上單調增加(否則你所要求的沒有意義) –

回答

3

你可以帶着你的輸入數組的這樣一個軸應用searchsorted功能:

numpy.apply_along_axis(lambda a: a.searchsorted(950), axis = 1, arr = air_pr) 

,如果我理解正確,這應該產生預期的結果。

+0

謝謝!它給了我解決方案,它是numpy.apply_along_axis(lambda a:a.searchsorted(950),axis = 0,arr = air_pressure) 該數組必須傳遞與arr =,軸是0(我仍然必須理解爲什麼)。 此外,壓力值必須從低到高排序,但我想我會找到一個解決方案。 –

+0

好的。我已經刪除了'arr ='以將命令合併到一行中,但是Python當然會在該位置投訴非關鍵字arg。 –