基于python中的一些分段函数生成一个新的分段函数

问题描述

假设我有几个列表

b_wi = [[1,2],[1.5,2.5,3]] #b_wi is a subset of x
f_wi = [[5,4,[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]
'''

enter image description here

现在我想得到一个函数(F1+F2)和相应的区间。 我做了一些搜索,发现了这个: Evaluate sum of step functions 按照链接中的解决方案,我可以生成新的分段函数 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,np.asarray(f))

现在我可以得到新函数(F1+F2)

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)