【问题标题】:Piecewise function in numpy with multiple argumentsnumpy中具有多个参数的分段函数
【发布时间】:2018-11-24 01:22:15
【问题描述】:

我尝试定义一个函数(帐篷图)如下:

def f(r, x):
    return np.piecewise([r, x], [x < 0.5, x >= 0.5], [lambda r, x: 2*r*x, lambda r, x: 2*r*(1-x)])

而 r, x 将是 numpy 数组:

no_r = 10001
r = np.linspace(0, 4, no_r)
x = np.random.rand(no_r)

我希望结果是一个匹配 r 和 x 形状的 numpy 数组,使用具有相同索引的数组 r 和 x 的每对元素进行计算。例如,如果 r = [0, 1, 2, 3] 且 x = [0.1, 0.7, 0.3, 1],则结果应为 [0, 0.6, 1.2, 0]。 发生错误:“布尔索引与维度 0 上的索引数组不匹配;维度为 2,但对应的布尔维度为 10001” 那么我应该怎么做才能达到预期的目的呢?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您想要得到的结果可以通过np.select 来完成,例如:

    def f(r, x):
        return np.select([x < 0.5,x >= 0.5], [2*r*x, 2*r*(1-x)])
    

    然后用

    r = np.array([0, 1, 2, 3])
    x = np.array([0.1, 0.7, 0.3, 1])
    
    print (f(r,x))
    [0.  0.6 1.2 0. ]
    

    编辑:在这种情况下,只有 2 个条件是独占的,您也可以使用 np.where

    def f(r,x):
        return np.where(x<0.5,2*r*x, 2*r*(1-x))
    

    会给出相同的结果。

    【讨论】:

      猜你喜欢
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 2019-01-16
      • 2020-08-29
      • 1970-01-01
      相关资源
      最近更新 更多