Получить минимальное и максимальное значение Numpy MaskedArray повышает AttributeError - PullRequest
0 голосов
/ 28 августа 2018

У меня есть замаскированный массив, содержащий некоторые реальные значения и некоторые разряды. Через ipython, это то, что я настроил:

In [31]: x                                                                      
Out[31]:                                                                        
masked_array(data=[--, --, --, 2.718281828459045, 3.141592653589793],           
             mask=[ True,  True,  True, False, False],                          
       fill_value='?',                                                          
            dtype=object)                                                       

Примечание: причина dtype=object в том, что это фактический ring_buffer , содержащий datetime и значения с плавающей запятой. Однако для этого это не должно иметь значения.

Я хочу найти максимум и минимум этого массива. Документация указывает на методы .min(…) и .max(…), чтобы сделать именно это. Однако, когда я звоню им, я получаю это исключение:

In [32]: x.max()                                                                
---------------------------------------------------------------------------     
AttributeError                            Traceback (most recent call last)     
<ipython-input-32-031604a175b1> in <module>()                                   
----> 1 x.max()                                                                 

/home/usr/repos/proj/.tox/develop/lib/python2.7/site-packages/numpy/ma/core.pyc in max(self, axis, out, fill_value, keepdims) 
   5707         if out is None:                                                 
   5708             result = self.filled(fill_value).max(                       
-> 5709                 axis=axis, out=out, **kwargs).view(type(self))          
   5710             if result.ndim:                                             
   5711                 # Set the mask                                          

AttributeError: 'str' object has no attribute 'view'         

Что я делаю не так?

1 Ответ

0 голосов
/ 28 августа 2018

То, что вы используете dtype=object, имеет значение. Маскированный массив не знает, как правильно их обрабатывать, поэтому просто использует стандартные методы numpy.array. Значение по умолчанию для dtype=object равно '?', поэтому вы получите ошибку.

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

x = array([datetime.datetime(2018, 8, 28, 8, 52, 2, 107691), 3.14, 2.78],
           dtype=object)

x.max()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-152-031604a175b1> in <module>()
----> 1 x.max()

C:\Programs\Anaconda3\lib\site-packages\numpy\core\_methods.py in _amax(a, axis, out, keepdims)
     24 # small reductions
     25 def _amax(a, axis=None, out=None, keepdims=False):
---> 26     return umr_maximum(a, axis, None, out, keepdims)
     27 
     28 def _amin(a, axis=None, out=None, keepdims=False):

TypeError: '>=' not supported between instances of 'datetime.datetime' and 'float'
...