0

动机:在数值列表中,我尝试找到最小值的索引 - 附带条件,该值必须低于某个阈值。这是一个一切都按预期工作的示例

import numpy as np
a = np.array([1, 5, -4])
threshold = 3
b = np.ma.MaskedArray(a, a >= threshold)
np.ma.argmin(b)  # returns 2, since a[2] is -4 which is the smallest element < 3

这是一个np.ma.argmin发生意外的情况:

a = np.array([4, 5])
threshold = 3
b = np.ma.MaskedArray(a, a >= threshold)
np.ma.argmin(b)  # returns 0, expected a None etc. since there is no element < 3

为什么会这样,我怎样才能让它返回None?注意:设置fill_value = None没有帮助。

4

1 回答 1

0

的代码argmin是:

def argmin(self, axis=None, fill_value=None, out=None):
    if fill_value is None:
        fill_value = minimum_fill_value(self)
    d = self.filled(fill_value).view(ndarray)
    return d.argmin(axis, out=out)

它用适当的填充值填充它(对于 int dtype,它是最大的整数),然后执行一个常规数组argmin。如果所有值都被屏蔽,那么所有值都是这个最大值,第一个是argmin.

b.min()返回一个特殊的mama.MaskedConstant。因此,您可能必须argmin对这个值进行某种测试来包装您的呼叫。我没有看到np.ma.is...可以测试这个的功能。但是文档中可能有一些东西。

于 2020-03-19T19:10:10.590 回答