Microsoft
Software
Hardware
Network
Frage : Perl-Index zu, der lang dauert
Ich habe einen Index, der viel Sortieren gegründet nach einem „einfachen gleitenden Mittel“ tut, das der Reihe nach nach 100 von Reihen basiert. Das Programm wendet Mathe viel Zeit durchführen auf. Ich muss es beschleunigen. Ist hier der Code:
------------------
package MAIN;
use streng;
sub simple_moving_avg;
my $length_of_sma = 4;
my @price_array = qw/
11.3
11.25
11.82
11.64
11.19
11.48
11.37
10.84
10.51
10.76
10.8
11.25
11.36
11.34
11.59
11.41
11.18
11.11
11.72
11.57
/;
foreach mein $i (@price_array) {
Druck „ich: $i \ n“;
}
my $sma = 0;
for (mein $count = 100000; $count >= 1; $count--) {# Knalle von 4 Werte „$length_ma "
$sma = simple_moving_avg (\ @price_
array, $len
gth_of_sma
);
/>print „einfaches bewegliches avg: $sma \ n“;
exit;
sub simple_moving_avg {mein
$pointer_array = $_ [0]; mein
$length_ma = $_ [1]; mein
$sum = 0;
mein @tmp = @$pointer_array;
für (mein $count = $length_ma; $count >= 1; $count--) {mein
$value = Knall (@tmp);
wenn (definiertes $value) {
$sum = $value + $sum; mein
}
}
$ma = sprintf („%.2f“, ($sum/$length_ma));
Rückhol$ma;
}
--------------------------
Here ist das Resultat vom Betrieb von DProf:
Total Gesamtverarbeitungszeit = 1.987965 Seconds
User+System Zeit = 2.194965 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sek/Anruf Csec/c Name
108. 2.377 2.377 100000 0.0000 0.0000 MAIN:: simple_moving_avg
0.00 - -0.000 1 - - streng:: import
0.00 - -0.000 1 - - Hauptleitung:: BEGIN
0.00 - -0.000 1 - - streng:: bits
0.00 - -0.000 1 - - MAIN:: BEGIN
--------
My Frage ist: Kann diese Perl-Subroutine auf verbessert werden (das ExclSec muss durch 50% geschnitten werden mindestens)? Ich bin nicht imstande, die Reihe zu ändern, die in das Unterseeboot überschritten wird. Wenn der Code nicht erheblich auf verbessert werden kann würde es sein schneller, Programm Wechselstrom-++ (mich erlerne C++) oder Versammlungsteilnehmer zu benennen? Was würde dieser Code sein? Viele thanks.
Antwort : Perl-Index zu, der lang dauert
Vorsimple_moving_avg {
mein ($pointer_array, $length_ma
) =@_;
mein $sum = 0;
$sum += $ _ für @ {$pointer_array} [0. $length_ma-1
];
Rückholsprintf " %.2f ", $sum/$length_ma;
}
Weitere Lösungen
Wort-Presse, die Frage bewirtet
asp.net: Mein Problem ist, benutze ich einen ajax Ergänzung Kalender, um BeginDate u. EndDate Werte einzutragen
Silverlight 4 UI Ereignisse
wie kann ich irgendeine Bildentschließung online ändern und sie zum lokalen PC dann innen sparen??
ZFS Sicherungshilfe Ubuntu 10.0.4 LTS
Form-Frage für Kristallreports
Betreffend INOTES in Lotos 8.5
Mühen, die ZWISCHEN Logik erhalten zu arbeiten
Spannungs-Sensor ermittelte einen Ausfall auf Bediener DELL-PowerEdge 2650
broadcom NIC teaming