gpt4 book ai didi

python-3.x - 在 Jupyter 中跨多个单元格拆分类函数?

转载 作者:行者123 更新时间:2023-12-04 15:05:44 29 4
gpt4 key购买 nike

鉴于以下代码:

class DTC:
def __init__(self):
self.__root = None

def unique(self,Y):
d = {}
for i in Y:
if i not in d:
d[i]=1
else:
d[i]+=1
return d

def ent(self,Y):
freq = self.__count_unique(Y)
ent_ = 0
total = len(Y)
for i in freq:
p = freq[i]/total
entropy_ += (-p)*math.log2(p)
return ent_
如果将其放置在 Jupyter Notebook 的单个单元格中,则上述内容将运行。但是,如果我希望将类代码拆分为这样的多个单元格,我该如何使类代码工作:
单元格 1
class DTC:
def __init__(self):
self.__root = None
单元格 2
    def unique(self,Y):
d = {}
for i in Y:
if i not in d:
d[i]=1
else:
d[i]+=1
return d
单元格 3
    def ent(self,Y):
freq = self.__unique(Y)
ent_ = 0
total = len(Y)
for i in freq:
p = freq[i]/total
ent_ += (-p)*math.log2(p)
return ent_

最佳答案

有两种方法可以在 Jupyter Notebooks 中将类定义拆分到多个单元格
方法一
以幼稚的方式做这件事(利用继承和覆盖):
Cell-1

class DTC:
def __init__(self):
self.__root = None
Cell-2
class DTC(DTC):
def unique(self,Y):
d = {}
for i in Y:
if i not in d:
d[i]=1
else:
d[i]+=1
return d
Cell-3
class DTC(DTC):
def ent(self,Y):
freq = self.__count_unique(Y)
ent_ = 0
total = len(Y)
for i in freq:
p = freq[i]/total
entropy_ += (-p)*math.log2(p)
return ent_
需要注意的是,这实际上在内部创建了一个类层次结构:
import inspect
inspect.getmro(DTC)
# outputs: (__main__.DTC, __main__.DTC, __main__.DTC, object)
如果您不打算拉伸(stretch)过多的单元格,则可以使用此方法。
方法二
使用包 jdc ;更多详情/文档 jdc
单元格 1
import jdc        # jupyter dynamic classes

class DTC:
def __init__(self):
self.__root = None
单元 2
%%add_to DTC
def unique(self,Y):
d = {}
for i in Y:
if i not in d:
d[i]=1
else:
d[i]+=1
return d
单元 3
%%add_to DTC
def ent(self,Y):
freq = self.__count_unique(Y)
ent_ = 0
total = len(Y)
for i in freq:
p = freq[i]/total
entropy_ += (-p)*math.log2(p)
return ent_
这次没有形成层次结构:
import inspect
inspect.getmro(DTC)
#output: (__main__.DTC, object)

关于python-3.x - 在 Jupyter 中跨多个单元格拆分类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66175275/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com