python - 根据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'的长度变得太大了。因此,我的方法太慢了。有谁知道我怎样才能加快速度?我觉得我使用了错误的方法。非常感谢。
解决方案
推荐阅读
- java - 如何使用java将泰语单词从CSV文件保存到数据库表中?
- bash - 删除 kubectl 命令返回的标题行
- c# - POST 方法仅适用于我的本地计算机,但不适用于远程服务器
- excel - 圆形生日的条件格式作为提醒
- python - 如何在其他执行中创建不同的 txt.name
- hibernate - 是否可以使用@manytomany 关系仅关联数据库中已经存在的对象?
- deep-learning - 在matlab中使用深度学习进行文本检测的简单两类(二进制)分类
- sql - 有没有办法使用 BigQuery 的 DAYOFWEEK 但将星期一作为第一天?
- reactjs - 我想在 React 的 material-ui 中创建一个宽对话框窗口,但全角参数不起作用
- javascript - 相同的正则表达式在 Java 和 JavaScript 中有不同的结果