首页 > 解决方案 > 根据python中的多个分段函数生成一个新的分段函数

问题描述

假设我有一些清单

b_wi = [[1,2],[1.5,2.5,3]] #b_wi is a subset of x
f_wi = [[5,4,2],[1,1.8,3,9]]

以下两个是由上述列表形成的阶跃函数。

'''
F1 = f_wi[0][0] if x< b_wi[0][0] ;
     f_wi[0][1] if   b_wi[0][0] <=x< b_wi[0][1];
      ...;
     f_wi[0][-1] if x>= b_wi[1][-1]


F2 = f_wi[1][0] if x< b_wi[1][0] ;
     f_wi[1][1] if   b_wi[1][0] <=x< b_wi[1][1];
      ...;
     f_wi[1][-1] if x>= b_wi[1][-1]
'''

在此处输入图像描述 现在我想得到一个新函数(F1+F2)和对应的区间。我做了一些搜索,发现: 评估阶跃函数的总和 按照链接中的解决方案,我能够生成新的分段函数 F1+F2 但是,由于这些阶跃函数的间隔长度不同,我不能直接在链接中应用解决方案。相反,我这样做了:

import numpy as np
from pandas.core.common import flatten
def func(x,b,f): 
    return f[np.searchsorted(b,x,side='right')]

x= np.unique(list(flatten(b_wi)))

a=np.zeros((len(x)))
for b, f in zip(b_wi,f_wi):
    a=a+ func(x,b,np.asarray(f))

现在我可以得到新的功能(F1+F2)

这只是我用来说明我的问题的一个简单示例。我的实际列表比这些更长,并且有 100000 个分段步进函数。由于我'flatten''b_wi'为了找到对应的区间,'intval'的长度变得太大了。因此,我的方法太慢了。有谁知道我怎样才能加快速度?我觉得我使用了错误的方法。非常感谢。

标签: pythonperformancenumpypiecewise

解决方案


推荐阅读