我有一个遮罩的数组,其中包含一些实数值和一些哑数。通过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'
我在做什么错了?
答案 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'