Может ли кто-нибудь объяснить, почему максимальное значение конкатенации между двумя массивами намного выше, чем максимальное значение в любом отдельном массиве?

avatar
USer555
8 августа 2021 в 16:45
58
1
0

У меня есть следующие два набора данных - оба из файлов netCDF:

ds1 = observed_1979_01
ds2 = observed_1979_02

Я хочу извлечь переменную с меткой 'swvl1' из обоих наборов данных, и я делаю это следующим образом:

m = ds1.variables['swvl1'][0,:,:]
n = ds2.variables['swvl1'][0,:,:]

Я хочу объединить эти два массива вместе, что я и делаю, используя np.dstack (хотя описанная здесь проблема возникает и с np.concatenate), например:

d = np.dstack((m,n))

Теперь, если я посмотрю на максимальное значение в любом массиве, я получу следующее:

max_m = 0.76293164
max_n = 0.76335037

Однако максимальное значение объединенных массивов равно:

max_d = 9.96921e+36

Почему это происходит? Я считаю, что что-то должно быть очень неправильно при объединении двух массивов, чтобы получить другое максимальное значение, но я не могу понять, что это такое. У кого-нибудь есть идеи?

Источник
Charles Duffy
8 августа 2021 в 16:48
2

Можно ли это воспроизвести без набора данных, который есть только у вас? (Хорошим минимально воспроизводимым примером является то, что кто-то может скопировать/вставить без изменений, чтобы запустить и увидеть проблему самостоятельно, а также упростить тестирование и проверку предлагаемых исправлений; если это можно воспроизвести с набором данных, достаточно небольшим, чтобы жестко закодировать в вопросе, это было бы идеально).

hpaulj
8 августа 2021 в 16:55
0

Я подозреваю проблему dtype

USer555
8 августа 2021 в 16:58
0

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

USer555
8 августа 2021 в 16:59
0

@hpaulj что это значит? как бы мне это исправить?

hpaulj
8 августа 2021 в 17:39
0

Сначала посмотрите на m.dtype и т. д. Мы не можем «исправить» что-то, не выявив сначала проблему. У вас есть данные, у нас нет. Поэтому мы можем давать советы только на основе того, что вы нам рассказываете.

USer555
8 августа 2021 в 17:44
0

Когда я набираю «m.dtype», он возвращает следующее сообщение об ошибке: TypeError: объект «numpy.dtype» не вызывается

hpaulj
8 августа 2021 в 19:21
0

Вы набрали m.dtype или m.dtype()?

USer555
11 августа 2021 в 09:26
0

извините, это был m.dtype()

USer555
11 августа 2021 в 10:07
0

Теперь я попробовал это с m.dtype, и он возвращает dtype ('float32')

Ответы (1)

avatar
Charlie Zender
11 августа 2021 в 17:07
1

Максимальное значение 9.96921e+36 идентично значению по умолчанию _FillValue, которое может указывать на то, что ваши массивы содержат неинициализированные значения до (и после) их объединения. Перед вычислением максимума убедитесь, что все значения инициализированы допустимыми значениями, и/или задайте подпрограмме, вычисляющей максимум, значение 9,96921e+36 в качестве отсутствующего значения, которое следует игнорировать.

Отвечая на вопрос в комментарии ниже:

Да. Неинициализированный в этом контексте означает, что переменная была определена и на диске было выделено место для хранения ее значений, однако значения никогда не записывались. По умолчанию в netCDF незаписанные значения отображаются как 9.96921e+36 при чтении.

USer555
11 августа 2021 в 17:36
0

Спасибо за Ваш ответ. Что вы подразумеваете под инициализацией? Как бы я этого добился?

USer555
11 августа 2021 в 17:37
0

Глядя на это, после конкатенации все значения в массиве равны 9,969...e+36, может ли это быть из-за одной и той же унитарной проблемы?