问题描述
假设我有几个列表
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]
'''
现在我想得到一个新函数(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 (将#修改为@)