我对python相当陌生,尤其是在类属性和它们的工作方式方面。我遇到过这样一个问题:我有一个函数“builddata”,它输出几个int的列表(粗粒化),并将其发送给另一个函数“粗粒化”。你知道吗
在脚本的粗化过程中,这些函数被调用了数百次,每次粗化都是不同的。我想做的是:
a)每次粗粒化达到“粗粒化”时,它都会使用该实例,但也会将其保存到一个更大的列表中,在多次重复该函数后,该列表将包含许多不同的粗粒化配置,然后可以稍后使用。你知道吗
b)在其他地方定义这个过程,粗粒化被发送到两个函数,在一个函数中完成它的常规过程,但是也被配置到这个所谓的列表列表中,然后可以使用它。你知道吗
我还应该提到,所有这些函数都是在同一个类“MultiFitter”中定义的。出于简单的原因,我更喜欢方法a),但任何可能的解决方案都会很好。下面是我所说内容的一个小摘录。你知道吗
干杯
class MultiFitter(object):
def __init__(
self, models, mopt=None, ratio=False, fast=True, extend=False,
fitname=None, wavg_svdcut=None, **fitterargs
):
super(MultiFitter, self).__init__()
models = [models] if isinstance(models, MultiFitterModel) else models
self.models = models
self.fit = None # last fit
self.ratio = ratio
self.mopt = mopt
self.fast = fast
self.extend = extend
self.wavg_svdcut = wavg_svdcut
self.fitterargs = fitterargs
self.fitname = (
fitname if fitname is not None else
lambda x : x
)
def builddata(self, data=None, pdata=None, prior=None, mf=None):
if mf is None:
mf = self._get_mf()
mf['flatmodels'] = self.flatten_models(mf['models'])
if pdata is None:
if data is None:
raise ValueError('no data or pdata')
pdata = gvar.BufferDict()
for m in mf['flatmodels']:
M = m.builddata(data)
CoarseGraining = []
c1 = 1
c2 = 0
for i in range(1, M.shape[0]):
z = gvar.evalcorr([M[c2],M[i]])
corrValue = z[1][0]
if corrValue >= 0.7:
c1 = c1 + 1
if i == M.shape[0]-1:
CoarseGraining.append(int(c1))
else:
CoarseGraining.append(int(c1))
c2 = c2 + c1
c1 = 1
if i == M.shape[0]-1:
CoarseGraining.append(int(1))
pdata[m.datatag] = (
m.builddata(data) if m.ncg <= 1 else
MultiFitter.coarse_grain(m.builddata(data), CoarseGraining)
)
@staticmethod
def coarse_grain(G, CoarseGraining):
G = numpy.asarray(G)
D = []
counter = 0
for i, ncg in enumerate(CoarseGraining):
D.append(str(numpy.sum(G[..., counter:counter + ncg], axis=-1) / ncg))
counter = counter + ncg
D = numpy.asarray(D)
print(array, 'IS THIS IT???')
print(D ,'\n')
#return numpy.transpose([G])
return G
一种方法是使
coarse_grain
成为class MultiFitter
的常规方法,并在类__init__
中实例化full_list
。然后附加到coarse_grain
方法中的列表。你知道吗然后可以通过
self.full_list
访问列表列表。你知道吗相关问题 更多 >
编程相关推荐