应用多个条件来验证数组时出现问题?

Problems while applying multiple conditions to validate an array?

我收到了很多这样的数组:

arr1 = np.asarray([41, 183, 101, 1607, 70, 137])

arr2 = np.asarray([300, 250, 300, 17, 300, 190])

arr3 = np.asarray([41, 10, 60, 1207, 70, 137])

我正在用这个函数验证:

def check(arr):
    if arr[ arr >= 90 ].size >= 4:
        return 'maybe'
    elif arr[ arr >= 250 ].size >= 4:
        return 'yes'
    elif arr[ arr < 90 ].size >= 4:
        return 'no'

我要申请的条件是,如果数组至少有4个元素大于90,return"maybe",同时如果至少有4个元素大于90大于 250 的数组应该是 "yes"。最后,如果小于4的元素大于90,我应该return "no".

我尝试应用上述功能甚至np.where。然而,该函数不适用于 arr2,因为它是 returning maybe 而不是 yes。检查这些数组的多个条件的正确和 pythonic(单行)方法是什么?

一旦一个条件的计算结果为 True,则不再计算其余条件。您需要调换前两个条件的顺序。

单行线如下所示:

def check(arr):
    return 'yes' if arr[ arr >= 250 ].size >= 4 else 'maybe' if arr[ arr >= 90 ].size >= 4 else 'no'

不过,将所有内容都放在一行中会违反 PEP-8,其中规定行的长度不应超过 80 个字符,因此是非 Python 的。

您的代码按照编写的方式运行。您首先检查“可能”条件,并且 arr2 符合条件:任何元素 >250 也 >90。 如果可能,请重新安排您的条件,使其相互排斥以避免此类问题。 如果您的条件不应该是相互排斥的,那么您有 2 个修复方法:1) 如果您想要 arr2,即“是”和“可能”,到 return“是”,那么在“可能”条件之前测试“是”条件。 2)测试每个条件并收集结果。我喜欢 2,所以这是它的样子:

def ismaybe(arr): return arr[ arr >= 90 ].size >= 4
def isyes(arr): return arr[ arr >= 250 ].size >= 4
def isno(arr): return arr[ arr < 90 ].size >= 4
def check(arr): return {"maybe": ismaybe(arr), "yes": isyes(arr), "no":, isno(arr)}

一行:

def check(arr):
    return ['yes', 'maybe', 'no'][np.bincount(np.digitize(arr, [np.inf, 250, 90, -np.inf])).argmax()-1]