2015-05-20 2 views
1

Я использую Python 2 и обрабатываю данные netcdf.Как найти минимальное значение массива netCDF, исключая нуль

Этого массив является переменным называется смешение воды облака отношения, которое является выходом из модели WRF климата, который имеет размеры: 4

QC(time (25), vertical level (69), latitude (119), longitude (199)) 

Я пытаюсь получить минимальное значение из значений в этом массиве , Из первоначального анализа с использованием визуализации NCVIEW я обнаружил, что минимальное значение составляет приблизительно 1x10-5, а максимальное - 1x10-3.

Я использовал

var = fh.variables['QC'] 
var[:].max() 
var[:].min() 

Максимально работает нормально, но мин дает мне 0.0.

Тогда я попробовал решение от here, который

var[var>0].min() 

, но я также получаю ноль. Затем я понял, что приведенный выше код работает для массивов с негативами, а у моих нет негативов.

Я пробовал искать решения здесь и там, но ничего не нашел для моей ситуации. Пожалуйста, если кто-нибудь может указать мне на правильные направления, я буду очень признателен. Спасибо.

+0

'qc [qc! = 0] .min()' может быть? – Zero

+3

не может воспроизвести вашу ошибку, просто попробовал его A = np.array ((1e-10,0)) print A [A> 0] .min() >> 1e-10 –

+0

Действительно ли он возвращает ноль или только _prints_ ноль? – heltonbiker

ответ

2

var[var>0].min является функцией, вам нужно вызвать его с помощью()

var[var>0].min() должен работать гораздо лучше

+0

Привет @firelynx Спасибо за это, я фактически использовал второй в своем скрипте (и это не сработало), но я забыл набрать здесь скобки. Я отредактировал свой вопрос. – cwmwl

0

жаль, что не могут размещать данные, как я не имею честь АКЦИЮ данные. Я попытался создать случайный 4d-массив, похожий на данные, и использовал все решение, которое вы все предоставили, особенно @Joao Abrantes, все они, похоже, отлично работали. Поэтому я подумал, может быть, есть некоторые проблемы с данными.

К счастью, в данных нет ничего плохого. Я обсуждал это с моим другом, и мы наконец нашли решение.

Решение

qc[:][qc[:]>0].min() 

Я должен указать [:] после переменной вместо того, чтобы просто делать

qc[qc>0].min() 

Существует и другой способ, который должен указать массив в NumPy массив, потому что, qc = fh.variables['QC'] возвращает netCDF4.Variable. Добавив вторую строку qc2 = qc[:], она стала numpy.ndarray.

qc = fh.variables['QC'] 
qc2 = qc[:]  # create numpy array 
qc2[qc2>0].min() 

Прошу прощения, если мой вопрос не был ясен, когда я опубликовал его вчера. Как я узнал об этом сегодня.