zoukankan      html  css  js  c++  java
  • numpy学习(将条件逻辑表述为数组运算)

    numpy.where函数是三元表达式xifconditionelsey的矢量化版本。假设我们有一个布尔数组和两个值数组:

    假设我们想要根据cond中的值选取xarr和yarr的值:当cond中的值为True时,选取xarr的值,否则从yarr中选取。列表推导式的写法应该如下所示:

    这有几个问题。第一,它对大数组的处理速度不是很快(因为所有工作都是由纯Python完成的)。第二,无法用于多维数组。若使用np.where,则可以将该功能写得非常简洁:

    np.where的第二个和第三个参数不必是数组,它们都可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。假设有一个由随机数据组成的矩阵,你希望将所有正值替换为2,将所有负值替换为-2。若利用np.where,则会非常简单:

    传递给where的数组大小可以不相等,甚至可以是标量值。

    只要稍微动动脑子,你就能用where表述出更复杂的逻辑。想象一下这样一个例子,我有两个布尔型数组cond1和cond2,希望根据4种不同的布尔值组合实现不同的赋值操作:

    result = [ ]

    for i in range( n):

      if cond1[ i] and cond2[ i]:

        result. append( 0)

      elif cond1[ i]:

        result. append( 1)

      elif cond2[ i]:

        result. append( 2)

      else:

        result. append( 3)

    虽然不是非常明显,但这个for循环确实可以被改写成一个嵌套的where表达式:

    np.where(cond1&cond2,0,

                np.where(cond1,1,

                         np.where(cond2,2,3)))

  • 相关阅读:
    c#RSA的SHA1加密与AES加密、解密
    c#后台代码请求访问api接口
    Hbuilder给手机发送短信与拨打电话
    Hbuilder获取手机当前地理位置的天气
    plus.webview.create( url, id, styles, extras )参数及说明
    九九乘法表+冒泡排序(校园回忆录)
    c#数据处理总结(分组、交并差与递归)
    Hbuilder MUI 下拉选择与时间选择器
    JAVA常用开源工具与项目
    mysql 中常用功能
  • 原文地址:https://www.cnblogs.com/anner-nie/p/8544203.html
Copyright © 2011-2022 走看看