как использовать np.max для пустого массива numpy без ValueError: массив нулевого размера до максимума операции сокращения, который не имеет идентичности - PullRequest
0 голосов
/ 18 января 2020

Я получаю случай, когда я попытался использовать np.max() в пустом массиве numpy, он сообщит о таких сообщениях об ошибках.

# values is an empty numpy array here
max_val = np.max(values)

ValueError: массив нулевого размера для уменьшения максимум операции, у которого нет идентификатора

Так что я думаю, чтобы исправить это, пытаясь сначала разобраться с пустым массивом numpy перед вызовом np.max() следующим образом:

# add some values as missing values on purposes.
def deal_empty_np_array(a:np.array):
    if a.size == 0:
        a = np.append(a, [-999999, -999999])

    return a

values = deal_empty_np_array(values)
max_val = np.max(values);

ИЛИ используйте способ try catch, как этот ссылка .

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

PS: Извините, что не дал четкого описания раньше.

Ответы [ 2 ]

2 голосов
/ 18 января 2020
In [3]: np.max([])                                                                               
---------------------------------------------------------------------------
...
ValueError: zero-size array to reduction operation maximum which has no identity

Но проверьте документы. В более новых numpy ufunc, таких как max, принимается параметр initial, который позволяет работать с пустым массивом:

In [4]: np.max([],initial=10)                                                                    
Out[4]: 10.0
0 голосов
/ 18 января 2020

Я думаю, что вы можете просто проверить его и, в конце концов, переназначить его перед вызовом np.max:

values = -999 if values.size ==0 else values
max_val = np.max(values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...