利用Python进行数据分析

将条件逻辑作为数组操作

2019-01-30  本文已影响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]])
上一篇下一篇

猜你喜欢

热点阅读