Microsoft
Software
Hardware
Network
Cuestión : Escritura del Perl que dura demasiado
Tengo una escritura que haga mucha clasificación basada sobre una “media móvil simple” que alternadamente se base sobre 100 de órdenes. El programa está pasando mucho tiempo la ejecución de la matemáticas. Debo acelerarlo. Aquí está el código:
------------------CAÑERÍA del
package;
use terminante;
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 mi $i (@price_array) {impresión del
“yo: $i \ n”;
my del
} $sma = 0;
for (mi $count = 100000; >= 1 de $count; $count--) {# estallidos 4 del
de los valores “$length_ma " $sma = simple_moving_avg (\ @price_
array, $len
gth_of_sma
);
/>print “: $sma \ n”;
exit; simple_moving_avg del
sub {
mi $pointer_array = $_ [0];
mi $length_ma = $_ [1];
mi $sum = 0;
mi @tmp = @$pointer_array;
del
para (mi $count = $length_ma; >= 1 de $count; $count--) {
mi $value = estallido (@tmp);
si ($value definido) {
$sum = $value + $sum;
del
del
}} mi $ma = sprintf (“%.2f”, ($sum/$length_ma));
$ma de vuelta;
del
}--------------------------el
Here es el resultado de funcionar DProf: tiempo transcurrido del
Total = 1.987965 tiempo de Seconds
User+System de = sec 2.194965 #Calls de Seconds
Exclusive Times
%Time ExclSec CumulS/llamada Csec/c Name
108. 2.377 2.377 100000 0.0000 0.0000 CAÑERÍAS:: simple_moving_avg
0.00 - -0.000 1 - - terminante:: cañería del import
0.00 - -0.000 1 - -:: BEGIN
0.00 - -0.000 1 - - terminante:: CAÑERÍA del bits
0.00 - -0.000 1 - -:: BEGIN
--------la pregunta del
My es: ¿Puede esta subrutina del Perl ser mejorada sobre (el ExclSec necesita ser cortado por por lo menos el 50%)? No puedo modificar el arsenal que es pasado en el submarino. ¿Si el código no se puede mejorar perceptiblemente sobre él sería más rápido llamar el programa del A.C. ++ (estoy aprendiendo C++) o el ensamblador? ¿Cuáles ese código sería? Muchos thanks.
class= del
Respuesta : Escritura del Perl que dura demasiado
simple_moving_avg secundario {
mi ($pointer_array, $length_ma
) =@_;
mi $sum = 0;
_ de $sum += $ para @ {$pointer_array} [0. $length_ma-1
];
sprintf de vuelta " %.2f ", $sum/$length_ma;
}
Otras soluciones
Cómo fijar un número de líneas en un informe
Cómo fijar extremo del aeropuerto como servidor del DHCP en el LAN con SonicWall
Ediciones del enlace hipertexto
Agregar la fecha a MySQL
Pares de las preguntas de Apple
El DNS reverso no empareja la bandera del smtp
¿Cómo puedo funcionar conmigo PC en modo seguro?
HISTOGRAMA CON EL CP Y EL ANÁLISIS DE CPK
reglas no corrientes de la perspectiva
volver un valor