• Python中numpy的where()函数


    第一种用法

    np.where(conditions,x,y)

    if (condituons成立):

      数组变x

    else:

      数组变y

    import numpy as np
    '''
    x = np.random.randn(4,4)
    print(np.where(x>0,2,-2))
    #试试效果
    xarr = np.array([1.1,1.2,1.3,1.4,1.5])
    yarr = np.array([2.1,2.2,2.3,2.4,2.5])
    zarr = np.array([True,False,True,True,False])
    result = [(x if c else y)
              for x,y,c in zip(xarr,yarr,zarr)]
    print(result)
    
    #where()函数处理就相当于上面那种方案
    
    result = np.where(zarr,xarr,yarr)
    print(result)
    
    '''
    #发现个有趣的东西
    # #处理2组数组
    # #True and True = 0
    # #True and False = 1
    # #False and True = 2
    # #False and False = 3
    
    cond2 = np.array([True,False,True,False])
    cond1 = np.array([True,True,False,False])
    #第一种处理 太长太丑
    result = []
    for i in range(4):
        if (cond1[i] & cond2[i]):   result.append(0);
        elif (cond1[i]):    result.append(1);
        elif (cond2[i]):    result.append(2);
        else :  result.append(3);
    print(result)
    #第二种 直接where() 很快很方便
    result = np.where(cond1 & cond2,0,np.where(cond1,1,np.where(cond2,2,3)))
    print(result)
    #第三种 更简便(好像这跟where()函数半毛钱的关系都没有
    result = 1*(cond1 & -cond2)+2*(cond2 & -cond1)+3*(-(cond1 | cond2))  (没想到还可以这么表达吧)
    print(result)
      
    View Code

    第二种用法

    where(conditions) 

    相当于给出数组的下标

    x = np.arange(16)
    print(x[np.where(x>5)])
    #输出:(array([ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15], dtype=int64),)
    
    x = np.arange(16).reshape(-1,4)
    print(np.where(x>5))
    
    #(array([1, 1, 2, 2, 2, 2, 3, 3, 3, 3], dtype=int64), array([2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
    #注意这里是坐标是前面的一维的坐标,后面是二维的坐标
    View Code
    ix = np.array([[False, False, False],
           [ True,  True, False],
           [False,  True, False]], dtype=bool)
    print(np.where(ix))
    #输出:(array([1, 1, 2], dtype=int64), array([0, 1, 1], dtype=int64))
    View Code

      

  • 相关阅读:
    Java学习01-使用maven插件tomcat搭建web maven项目
    Anaconda3安装及使用
    python标准日志模块logging及日志系统设计
    python traceback捕获并打印异常
    python time
    PIL 中的 Image 模块
    python zipfile使用
    PHP 判断用户是否手机访问
    php数组相加 两个数组键名相同 后者不能覆盖前者
    解决Ubuntu Server 12.04换了网卡MAC地址后 网络不可用的问题.
  • 原文地址:https://www.cnblogs.com/oxxxo/p/6129294.html
Copyright © 2020-2023  润新知