Ich habe diesen Code:Pass Ausgabe von Klasseninstanz als Eingabe in einem anderen
import numpy as np
class B():
def __init__(self, a,b):
self.a = a
self.b = b
class Criteria():
def __init__(self, method, minimum, maximum, measures=None):
self.method = method
self.minimum = minimum
self.maximum = maximum
self.measures = measures if measures is not None else None
def calcs(self):
if self.measures is not None:
for x in self.measures:
if (x.a > self.minimum and x.a < self.maximum):
x.a = 999
return self.measures
def avg(self):
if self.measures is not None:
return np.average([x.value for x in self.measures])
else:
return np.average(3)# Here should be the result where None is defined
# Now I put just an arbitrary number
class Evaluate():
def __init__(self, criteria):
self.criteria = criteria
testdata = np.array([Evaluate(
np.array([Criteria('V', 1,100,
np.array([B(100, 0.1),
B(11, 0.3),
B(300, 0.2),
B(33, 0.1)],dtype=object)
),
Criteria('AVG', 22, 220, None)])
)])
for x in testdata:
for idx, el in enumerate(x.criteria):
if el.method == 'V':
el.calcs() # this result must be passed as input to the `el.avg()`
if el.method == 'AVG':
el.avg()
Ich habe eine Klasse B
welche einige Daten (a und b Felder) hält.
Ich lade diese Daten in die Klasse Criteria
, um die Kriterien zu durchlaufen und entsprechend zu ändern.
Dann wird die Evaluate
Klasse alle oben genannten enthalten.
Ich verwende measures=None
zur Criteria-Klasse, weil im Fall zum Beispiel für die avg
-Funktion, habe ich möglicherweise keine Messungen, um auf ihnen den Durchschnitt zu berechnen, aber ich habe (das ist mein Fall) Messungen von vorherigen Kriterien Klasse auf die ich den Durchschnitt anwende.
Nun, was ich erreichen möchte, ist dies.
laden zunächst die Daten:
B(100, 0.1),
B(11, 0.3),
B(300, 0.2),
B(33, 0.1)
Diese Daten, die durch die Kriterien vorbei (durch die calcs
Funktion ausgeführt wird), wird chage zu:
B(100, 0.1),
B(999, 0.3),
B(300, 0.2),
B(999, 0.1)
Nun werden die obigen Daten (die Das Ergebnis des ersten Kriteriums muss als Eingabe an das zweite Kriterium übergeben werden und den Durchschnittswert mit der Funktion avg
berechnen. Ich weiß nicht, ob dies ohne ein Argument in der Funktion avg
möglich ist self
.
Also, mein endgültiges Ergebnis wird der Wert 599,5 sein.
Hallo, danke für die Hilfe Ich kann nicht sehen, wie 'C (AVG zu machen.', um den Durchschnitt von' 100,999,300,999' zurückzugeben, was nur der Wert 999 ist. Sie sagen auch: 'So bewertet die V-Aktion die Mittelwerte, gibt sie zurück, ändert aber auch das B-Objekt, aber die' V'-Aktion hat nichts mit Durchschnittswerten zu tun . Es ruft die 'calcs'-Funktion auf, die einige Kriterien auf die Maße anwendet. Dann muss ich aus diesen neuen Werten die avegage herausziehen, indem ich' avg' function.As für das Setzen von 'None' im zweiten' Criteria', ' C (AVG, 22,220, None) ist, weil ich nicht weiß, wie ich damit umgehen soll. Ich will anstelle von None das Ergebnis von 'calcs' weitergeben. – George
Wenn 'C = Kriterien ...', dann ändert 'C.calcs()' seine 'Maße'. 'C.avg()' gibt einen Wert basierend auf diesen 'Kennzahlen' zurück. In Ihrem Beispiel wird "calc" auf eine Liste von Kennzahlen angewendet, im Gegensatz zu einer anderen leeren Liste. Um beides zu tun, müssten Sie dieselbe Liste an zwei verschiedene "Kriterien" -Objekte übergeben. – hpaulj
ich eine Liste in eine Liste criteria.The Änderungen am versorgen, wenn ich das 'calcs' method.Then nennen, ich habe diese neue Liste mit den zweiten Kriterien liefern, um die average.I zu berechnen hoffe, es ist klar, – George