2014-02-20 2 views
1

, если у меня есть массив какМаксимальные и минимальные значения NumPy массива

z = np.random.random((41,61,106)) 
y,x=np.mgrid[slice(0,61, 1),slice(0,106, 1)] 
z=z[_num,x,y]] 

Кто я могу захватить 10 максимум и минимум 10 и маскировать остальных значений в массиве г.

И, возможно, возьмите среднюю величину максимального и минимального значений и введите еще 10 значений.

middle=sorted[(len(sorted)/2)-5:(len(sorted)/2)+5] 
print middle 
mask = ma.masked_inside(z,sorted[10],sorted[-10],middle) 
print mask 

ответ

1

Я не совсем понимаю фрагмент кода. Чтобы ответить на ваш первый вопрос:

import numpy as np 
import numpy.ma as ma 

z = np.random.random((10,10)) 
sorted = np.sort(z,axis=None) 
mask = ma.masked_inside(z,sorted[10],sorted[-10]) 

относительно вашего второго вопроса вы могли бы также рассмотреть конкатенации условия

ma.masked_where(((z<sorted[sorted.size/2-5]) | 
        (z>sorted[sorted.size/2+4])) & 
       ((z>sorted[10]) & (z<sorted[-10])),z) 
+0

спасибо! работает. Я отредактировал ответ и включил еще одну петицию, если вы не возражаете, что принимаете 10 значений между макс и мин, в среднем возьмите 10 самых близких. – virtualsets

+0

Мой код, который принимает 10 значений в середине, не работает. ваш да. – virtualsets

+0

И как я могу получить позицию в 2-мерном массиве? элементов в масках – virtualsets

1

Если вам нужно всего лишь несколько элементов в массиве для сортировки, с NumPy> = 1,8 эффективнее использовать np.partition, чем np.sort:

In [6]: z = np.random.rand(61, 106) 

In [7]: %timeit np.sort(z, axis=None) 
1000 loops, best of 3: 413 µs per loop 

In [8]: %%timeit 
    ...: n = z.size 
    ...: y = np.partition(z, (10, n//2 - 5, n//2 + 5, -10), axis=None) 
    ...: y[:10].sort() 
    ...: y[n//2 - 5:n//2 + 5].sort() 
    ...: y[-10:].sort() 
    ...: 
10000 loops, best of 3: 143 µs per loop 
+0

привет, спасибо,. Как я возвращаю значение, индекс элементов, замаскированных – virtualsets

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