当前位置 : 主页 > 编程语言 > python >

使用numpy查找元素位置numpy.where

来源:互联网 收集:自由互联 发布时间:2023-08-17
目录 numpy查找元素位置numpy.where 这里举几个例子 二维数组的例子 python numpy.where()函数 Example 总结 numpy查找元素位置numpy.where numpy.where(condition,x,y) 详细用法请大家详见官方文档 这里举几个
目录
  • numpy查找元素位置numpy.where
    • 这里举几个例子
    • 二维数组的例子
  • python numpy.where()函数
    • Example
  • 总结

    numpy查找元素位置numpy.where
    numpy.where(condition,x,y)

    详细用法请大家详见官方文档

    这里举几个例子
    import numpy as np
    a=np.array([1,2,3,4,5])
    print(np.where(a<3))#查找小于3的元素的位置

    结果

    (array([0, 1], dtype=int64),)

    注意输入的数组必须是numpy数组,list是不支持的

    二维数组的例子
    >>> x = np.arange(9.).reshape(3, 3)
    >>> np.where( x > 5 )
    (array([2, 2, 2]), array([0, 1, 2]))
    >>> x[np.where( x > 3.0 )]               # Note: result is 1D.
    array([ 4.,  5.,  6.,  7.,  8.])
    >>> np.where(x < 5, x, -1)               # Note: broadcasting.
    array([[ 0.,  1.,  2.],
           [ 3.,  4., -1.],
           [-1., -1., -1.]])

    python numpy.where()函数
    numpy.where(condition[,x,y])

    返回元素,可以是x或y,具体取决于条件(condition)

    如果只给出条件,则返回condition.nonzero()。

    对于不同的输入,where返回的值是不同的。

    参数:ccondition:array_llike,bool如果为True,则产生x,否则产生y。x,y:array_like,可选要从中选择的值。x,y和条件需要可以播放到某种形状。返回值:

    out:ndarray或ndarray元组

    如果同时指定了x和y,则输出数组包含x的元素,其中condition为True,其他元素来自y。如果只给出条件,则返回元组condition.nanzero(),条件为True的索引。

    Example

    当数组是一维数组时,返回的值是一维的索引,所以只有一组索引数组

    a = np.arange(8)
    a
    array([0, 1, 2, 3, 4, 5, 6, 7])
    np.where(a>4)
    (array([5, 6, 7], dtype=int64),)

    当数组是二维数组时,满足条件的数组值返回的是值的位置索引,因此会有两组索引数组来表示值的位置,返回的第一个array表示行坐标,第二个array表示纵坐标,两者一一对应

    b = np.arange(4*5).reshape(4,5)
    b
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14],
           [15, 16, 17, 18, 19]])
    np.where(b>14)
    (array([3, 3, 3, 3, 3], dtype=int64), array([0, 1, 2, 3, 4], dtype=int64))

    当条件(condition)为多维数组时,根据条件中为True则选择x中相应的数值,为False选择y中相应的数值

    np.where([[False, True], [False, True]],
            [[5, 3], [7, 9]],
            [[2, 6], [1, 8]])
    array([[2, 3],[1, 9]])

    第一个元素中的第一个值为False,所以选择y中的2,第二个值为True,选择x中3,第二个元素中的第一个值为False,所以选择y中的1,第二个值为True,选择x中9.

    当参数中只给出条件时,则返回非零元素的索引:

    np.where([[0, 1], [1, 1]])
    (array([0, 1, 1], dtype=int64), array([1, 0, 1], dtype=int64))
    x = np.arange(12.).reshape(4, 3)
    x
    array([[  0.,   1.,   2.],
           [  3.,   4.,   5.],
           [  6.,   7.,   8.],
           [  9.,  10.,  11.]])
    np.where(x>7)
    (array([2, 3, 3, 3], dtype=int64), array([2, 0, 1, 2], dtype=int64))
    x[np.where( x > 6.0 )]           
    array([  7.,   8.,   9.,  10.,  11.])
    np.where(x < 8, x, np.nan) 
    array([[  0.,   1.,   2.],
           [  3.,   4.,   5.],
           [  6.,   7.,  nan],
           [ nan,  nan,  nan]])

    根据找到的元素的索引找到元素的具体位置

    x = np.arange(12.).reshape(4, 3)
    x
    array([[  0.,   1.,   2.],
           [  3.,   4.,   5.],
           [  6.,   7.,   8.],
           [  9.,  10.,  11.]])
    positions = [2,6,10]
    ins = np.isin(x,positions)
    ins
    array([[False, False,  True],
           [False, False, False],
           [ True, False, False],
           [False,  True, False]], dtype=bool)
    np.where(ins)
    (array([0, 2, 3], dtype=int64), array([2, 0, 1], dtype=int64))

    总结

    网友评论