美文网首页利用Python进行数据分析
将条件逻辑作为数组操作

将条件逻辑作为数组操作

作者: 庵下桃花仙 | 来源:发表于2019-01-30 11:36 被阅读4次

    numpy.where 函数是三元表达式x if condition else y的向量化版本。

    In [72]: xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
    In [73]: yarr = np.array([2.1, 2.2 , 2.3, 2.4, 2.5])
    In [75]: cond = np.array([True, False, True, True, False])
    In [77]: result = [(x if c else y)
        ...: for x, y, c in zip(xarr, yarr, cond)] # 列表表达式
    
    In [78]: result
    Out[78]: [1.1, 2.2, 1.3, 1.4, 2.5]
    

    缺点:首先,数组很大的化,速度很慢;其次,数组多维时,无法奏效。

    In [79]: result = np.where(cond, xarr, yarr)
    In [80]: result
    Out[80]: array([1.1, 2.2, 1.3, 1.4, 2.5])
    

    np.where典型用法是根据一个数组生成一个新的数组。

    In [81]: arr = np.random.randn(4, 4)
    
    In [82]: arr
    Out[82]:
    array([[ 0.11080898, -1.00572741,  1.45813919,  1.34513378],
           [-0.1267906 ,  0.06126648,  0.38987613, -0.26484398],
           [-0.54729732, -1.87361921,  0.54933943,  1.01996784],
           [ 1.79025451, -1.12314291, -0.3137941 , -0.74643305]])
    
    In [83]: arr > 0
    Out[83]:
    array([[ True, False,  True,  True],
           [False,  True,  True, False],
           [False, False,  True,  True],
           [ True, False, False, False]])
    
    In [84]: np.where(arr > 0, 2, -2)
    Out[84]:
    array([[ 2, -2,  2,  2],
           [-2,  2,  2, -2],
           [-2, -2,  2,  2],
           [ 2, -2, -2, -2]])
    In [86]: np.where(arr > 0, 2, arr)
    Out[86]:
    array([[ 2.        , -1.00572741,  2.        ,  2.        ],
           [-0.1267906 ,  2.        ,  2.        , -0.26484398],
           [-0.54729732, -1.87361921,  2.        ,  2.        ],
           [ 2.        , -1.12314291, -0.3137941 , -0.74643305]])
    

    相关文章

      网友评论

        本文标题:将条件逻辑作为数组操作

        本文链接:https://www.haomeiwen.com/subject/uwvqsqtx.html