2013-07-19 5 views
1

я получил трехмерный массив со значениями давления воздуха в виде:numpy.searchsorted в многомерном массиве

[[[1000 1010] 
    [1005 990]] 

[[950 960] 
[955 940]] 

[[900 910] 
[905 890]]] 

структура представляет собой давление на различных уровнях, так что каждый элемент в 2-D является для каждого слоя.

Я хотел бы знать, на каком уровне давление 950 будет для каждого 2d-элемента, получая 2-мерный массив с индексом уровня для каждого элемента.

В массиве 1-D, как

a = [890, 940, 990] 

Я хотел бы использовать

a.searchsorted(950) 

и результат будет 2, что свидетельствует о том, что 950 будет идти на 3-м положении.

Есть ли способ сделать это для всего моего массива сразу, без необходимости делать это для каждого 2-го элемента?

+0

Я не совсем понимаю, что вам нужно. Если вы берете один массив значений давления (m, n) ', соответствующий одному уровню, говорите ли вы, что вы хотите, чтобы ранг значения' v' в векторе '(m * n,)' отсортированных значений для этого уровень, например 'Np.sort (А [0,:,:]. Квартира) .searchsorted (v)'? Тогда вы просто хотите сделать то же самое для каждого уровня? –

+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 в этой позиции. –

Смежные вопросы