获取一个Numpy MaskedArray的最小值和最大值会引发AttributeError

时间:2018-08-28 08:39:39

标签: python python-2.7 numpy numpy-ndarray

我有一个遮罩的数组,其中包含一些实数值和一些哑数。通过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,其中包含日期时间和浮点值。 但是,这无关紧要。

我想找到该数组的最大值和最小值。 The documentation指向.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 :(得分:1)

因此,您正在使用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'