Ich möchte eine Funktion duration = timer(n, f, arguments_of_f)
implementieren, die messen würde, wie viel Zeit eine Methode f
mit Argumenten arguments_of_f
n
Mal ausgeführt werden muss. Mein Versuch war die folgende:Wie variadic Argumente in Octave übergeben werden
function duration = timer(n, f, arguments_of_f)
duration = 0;
for i=1:n
t0 = cputime;
f(arguments_of_f);
t1 = cputime;
duration += t1 - t0;
end
In einer anderen Datei, ich habe
function y = f(x)
y = x + 1;
end
Der Aufruf d1 = timer(100, @f, 3);
funktioniert wie erwartet.
In einer anderen Datei, ich habe
function y = g(x1, x2)
y = x1 + x2;
end
aber der Anruf d2 = timer(100, @g, 1, 2);
gibt eine Fehlermeldung über undefined Argument x2
, das ist, wenn ich zurückblicke, irgendwie zu erwarten, da ich nur 1
-g
passieren und 2
wird nie verwendet.
So, wie die Funktion
timer
in Octave zu implementieren, so dass der Anruf wietimer(4, @g, x1, ... , xK)
funktionieren würde? Wie kann man diex
s zusammenpacken?
Also, ich bin für die Entsprechung von Pythons *args
Trick:
def use_f(f, *args):
f(*args)
funktioniert, wenn wir def f(x, y): return x + y
und rufen use_f(f, 3, 4)
definieren.
Was ist Ihre Frage? – excaza
@excaza Es war offensichtlich, dass ich nicht weiß, wie man die "Timer" -Funktion in Octave schreibt. Ich habe die Frage bearbeitet. – Antoine
@ Antoine. Können Sie zeigen, was Ihre aktuelle Implementierung der "Timer" -Funktion ist? Sie zeigen ein Code-Snippet, aber dort ist keine Funktion. Der Python-Code ist eigentlich irrelevant. Deine Idee ist klar genug, aber nicht das, was du tatsächlich getan hast. –