Ich frage mich, wie viel schneller a!=0
ist als !a==0
und verwendet das R-Paket Microbenchmark. Hier ist der Code (reduzieren 3E6 und 100, wenn Ihr PC langsam ist):Rechenzeit! =
library("microbenchmark")
a <- sample(0:1, size=3e6, replace=TRUE)
speed <- microbenchmark(a != 0, ! a == 0, times=100)
boxplot(speed, notch=TRUE, unit="ms", log=F)
Jedesmal, erhalte ich eine Handlung wie die unten. Wie erwartet, ist die erste Version schneller (Median 26 Millisekunden) als die zweite (33 Millisekunden).
Aber woher kommen diese wenigen sehr hohen Werte (Ausreißer)? Ist das ein Memory-Management-Effekt? Wenn ich mal auf 10 setze, gibt es keine Ausreißer ...
Edit: sessionInfo(): R Version 3.1.2 (2014-10-31) Plattform: x86_64-w64-mingw32/x64 (64-Bit)
Ich denke nicht so einfach sein wird, aufzuspüren; Ich habe ähnliche Ergebnisse gesehen, sogar mit "mal = 10" oder so. Denken Sie daran, dass "Microbenchmark" nicht kugelsicher ist. Es gibt ein paar Blogs, die irgendwo auf Semibugs hinweisen, wie es Timing-Informationen sammelt. Es kann auch einfach sein, dass während des normalen Ablaufs von "R" -Operationen gelegentlich ein "Ding" passiert - ein "GC" -Aufruf oder Warten auf RAM-Neuzuweisung auf Systemebene, etc. Versuchen Sie vielleicht, eine Schleife herumzulaufen 'system.time' um zu sehen, wie die Verteilung der Ergebnisse ist? –