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)))

  • 相关阅读:
    输入三个整数x,y,z,请把这三个数由小到大输出
    随机三位数
    球反弹高度
    成绩分类
    java判断开头结尾
    二分法查找
    Leetcode 6. ZigZag Conversion(找规律,水题)
    Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
    Leetcode 4. Median of Two Sorted Arrays(中位数+二分答案+递归)
    Leetcode 3. Longest Substring Without Repeating Characters(string 用法 水题)
  • 原文地址:https://www.cnblogs.com/anner-nie/p/8544203.html
Copyright © 2011-2022 走看看