Python 如何创建按顺序调用的对象的自定义管道?
Scikit学习功能是一个带有最终估计器的变换管道 我如何创建一些可以与没有scikit learn fit&transform方法,但有______;调用__;()的类一起使用的东西?我不希望解决方案使用scikit学习管道。因此,我想按照下面列出的顺序执行以下操作Python 如何创建按顺序调用的对象的自定义管道?,python,oop,scikit-learn,pipeline,Python,Oop,Scikit Learn,Pipeline,Scikit学习功能是一个带有最终估计器的变换管道 我如何创建一些可以与没有scikit learn fit&transform方法,但有______;调用__;()的类一起使用的东西?我不希望解决方案使用scikit学习管道。因此,我想按照下面列出的顺序执行以下操作 将dict传递给ppl,ppl将dict传递给a() 步骤1返回的输出df。传递给B()。\uuuuuuuu调用 步骤2返回的输出。传递给C()。uuuuuuuu调用 步骤3返回的输出。传递给lambda函数,该函数返回两列a和B
import pandas as pd
class A:
def __init__(self, sample=1):
self.sample = sample
def __call__(self, dct):
return pd.DataFrame(dct)[:self.sample]
class B:
def __init__(self, col1, col2):
self.col1 = col1
self.col2 = col2
def __call__(self, df):
return df[self.col1], df[self.col2]
class C:
def __call__(self, x, y):
return x+y
ppl = CustomPipeline(pipeline=[('A', A(sample=700)),
('B', B(col1='A', col2='B')),
('C', C())
('self', lambda x: x)])
df_sum = ppl(dct={'A': [1, 2, 4], 'B': [10, 2, 3]})
问题
- 如何实现CustomPipeline(),使其能够根据上面列出的示例工作
- 在每一个类中使用main()是否比在类中实现_____调用__()方法更好
输入导入序列、元组、可调用、任意
def CustomPipeline(管道:序列[Tuple[str,Callable[[Any],Any]])->Callable[[Any],Any]:
def_运行(值:任意)->任意:
对于名称,管道中的阶段:
值=阶段(值)
返回值
返回运行
>>>ppl=CustomPipeline([('a',λv:v*2),('b',λv:v+1)])
>>>ppl(5)
11
外部函数用于创建管道各阶段的闭合
这可以通过类轻松实现。很有趣。如果不是lambda v:v*2而是一个类呢?Any
可调用[[Any],Any]
应该可以工作,所以只要构造一个参数就可以了。如果你指的是一个类的实例(比如一个对象),那么它也是可以调用的(就像你的例子一样)。