pandas 如何根据numpy数组中的值改变函数

6l7fqoea  于 2023-02-02  发布在  其他
关注(0)|答案(2)|浏览(107)

我正试着画一个函数的曲面图,看起来像这样:

def model(param,x_1,x_2,x_3,x_4):
    est=param[0]+param[1]*(x_1+x_2*x_3+x_2**2*x_4)
    return est

重点是根据x_2的取值,当x_2〉=0时x_3=1,当x_2〈0时x_4=1(否则为0)。
当我试图绘制曲面图时,我对如何绘制网格感到困惑,因为除了x_1和x_2之外,还有2个变量。
为了计算z轴,我尝试将函数修改为:

def function (param,x_1,x_2):
    if x_2>0:
      est=param[0]+param[1]*(x_1+x_2)
    else:
      est=param[0]+param[1]*(x_1+x_2**2)
    return est)

但是它说真值是二义性的,我理解为python看x_2〉=0里面所有的值是不是。
我也尝试过使用np.sign(),但它的作用方式与我想要的不一样。
有没有什么方法可以根据数组中elenmt的值来改变函数,和/或在不使用for循环手动计算z轴的情况下解决这个问题?

iyr7buue

iyr7buue1#

如果要检查所有大于0的值,请使用all

def function (param,x_1,x_2):
    if all(x_2>0):
      est=param[0]+param[1]*(x_1+x_2)
    else:
      est=param[0]+param[1]*(x_1+x_2**2)
    return est

但如果要对每个值应用测试,请使用np.where

def function (param,x_1,x_2):
    return np.where(x_2 > 0,
                    param[0]+param[1]*(x_1+x_2),
                    param[0]+param[1]*(x_1+x_2**2))
siotufzp

siotufzp2#

我认为您需要numpy.where

def function (param,x_1,x_2):
    return np.where(x_2>0, 
                    param[0]+param[1]*(x_1+x_2), 
                    param[0]+param[1]*(x_1+x_2**2))

工作原理:

param = [10,8]
x_1 = np.array([1,2,3])
x_2 = np.array([0,4,10])

如果掩码中的Trueparam[0]+param[1]*(x_1+x_2)中的值,否则是param[0]+param[1]*(x_1+x_2**2)中的值:

print (x_2>0)
[False  True  True]

print (param[0]+param[1]*(x_1+x_2))
[ 18  58 114]

print (param[0]+param[1]*(x_1+x_2**2))
[ 18 154 834]

print (function(param,x_1,x_2))
[ 18  58 114]

相关问题