分享
三行代码  ›  专栏  ›  技术社区  ›  tumbleweed

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

  •  -1
  • tumbleweed  · 技术社区  · 1 周前

    我收到许多这样的阵列:

    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,则返回 "maybe" ,同时,如果至少有4个元素大于250,则应 "yes" . 最后,如果少于4个元素大于90,我应该返回 "no"

    我尝试应用上述函数,甚至 np.where . 不过,该函数对于arr2不起作用,因为它正在返回 maybe yes . 检查这些数组上的多个条件的正确方法是什么?

    2 回复  |  直到 1 周前
        1
  •  1
  •   CodeKorn    1 周前

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

    一行代码如下所示:

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

        2
  •  1
  •   BatWannaBe    1 周前

    您的代码正在按编写的方式工作。你先检查“可能”的情况,然后 arr2 如果可能的话,重新安排你的条件以避免这些问题。 如果你的条件不应该是互斥的,那么你有2个修正:1)如果你想 ,同时为“yes”和“maybe”,返回“yes”,然后在“maybe”条件之前测试“yes”条件。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)}
    
        3
  •  0
  •   Kevin    1 周前

    一行:

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