[PYTHON] Script de référence simple

Selon la rumeur, Ruby était lent, j'ai donc créé un script pour le benchmark et expérimenté.

Il s'agit d'un script (prévu) qui génère 1000 lignes de nombres pseudo aléatoires.

Ruby -v 1.9

require 'benchmark'

result = Benchmark.realtime do
  (1..1000).each do |x|
  randam = Random.new
    randam.rand(1000)
    x += 1
  end
end
puts "END: #{result}s"

résultat

END: 0.016832s

PostScript du 10/03/2015 Un script qui corrige ce que @scivola a souligné ruby -v ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]

require 'benchmark'

randam = Random.new
result = Benchmark.realtime do
  (1..1000).each do |x|
    randam.rand(1000)
  end
end
puts "END: #{result}s"
END: 0.00010036501043941826s

Python 2.7

import random
import timeit

def hoge():
    random.randrange(1000)

t = timeit.timeit(stmt=hoge, number=1000)

print "END: %fs"%(t)

résultat

END: 0.000763s

C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
  int i, a;
  clock_t start, end;


  start = clock();
  srand( (unsigned int)time(0));

  for(i = 0 ; i < 1000 ; i++){
   a = rand() % 1000;
  }
  end = clock();
  printf("END: %fs \n", (double)(end - start) / CLOCKS_PER_SEC);
}

résultat

END: 0.000017s

Je pense que le ratio ou l'ordre est presque le même que les données fournies par Google. .. .. Ruby a un code propre, donc je pense qu'il est mieux adapté pour créer des applications Web simples et étudier la programmation!

Oui.

Ré-expérimenter

2015/03/15 postscript Il semble qu'il n'était pas nécessaire de mettre randam.rand (1000) dans le bloc Le processus est également considérablement plus rapide, ce qui entraîne le dépassement de Python. (^ ^)

C'est un mystère que l'incrément a été ajouté (´ω `) ‥ Toho

Pourtant‥

S'il s'agit d'un benchmark qui ne génère que des nombres aléatoires, le système de traitement du langage n'est pas si pertinent, Je pense que cela mesurera les performances du générateur de nombres aléatoires intégré.

Certainement. Je me sens comme ça. C'est pourquoi j'ai effectué un test qui produit également. Ruby utilise Puts car il coupe les lignes selon Python print et C printf.    Ruby2.2.0p0

require 'benchmark'

randam = Random.new
result = Benchmark.realtime do
  (1..1000).each do |x|
    puts randam.rand(1000)
  end
end
puts "END: #{result.to_f}s"
$ ruby bench.rb > rubybench.txt
$ tail rubybench.txt
714
905
522
713
861
615
240
626
126
END: 0.0006876440020278096s
$ wc -l rubybench.txt
    1001 rubybench.txt

python 2.7.6

import random
import timeit

def hoge():
    print random.randrange(1000)

t = timeit.timeit(stmt=hoge, number=1000)

print "END: %fs"%(t)
$ python bench.py > pythonbench.txt
$ tail pythonbench.txt
754
786
919
950
16
294
18
266
62
END: 0.001284s
$ wc -l pythonbench.txt
    1001 pythonbench.txt

compilateur c gcc

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
  int i, a;
  clock_t start, end;


  start = clock();
  srand( (unsigned int)time(0));

  for(i = 0 ; i < 1000 ; i++){
   a = rand() % 1000;
   printf("%d\n", a);
  }
  end = clock();
  printf("END: %fs \n", (double)(end - start) / CLOCKS_PER_SEC);
}
$ gcc -o hoge.o bench.c
$ ./hoge.o > benchc.txt
$ tail benchc.txt
12
589
344
998
668
221
426
11
508
END: 0.000167s
$ wc -l benchc.txt
    1001 benchc.txt

Comme il compte le nombre de lignes, j'ai essayé d'insérer un processus de sortie en texte par redirection. C'est le résultat de la non-sortie de la norme. Le résultat est C、Ruby、Python Le résultat est qu'il est plus rapide de l'ordre de.

Histoire intérieure

Écrivez le résultat de la sortie standard sur le terminal, pas la sortie dans la queue ou le texte. Ruby END: 0.00417862601170782s END: 0.0041498920036247s END: 0.004223413998261094s

Python END: 0.003860s END: 0.004131s END: 0.002629s

C END: 0.000922s END: 0.000938s END: 0.000984s

C est toujours plus rapide, mais Ruby était plus rapide lors de la redirection vers du texte. Lorsque la sortie standard a été effectuée sur le terminal, le résultat était à peu près le même (même si je suis préoccupé par la largeur de flou de Python).

Résumé

Ruby n'était pas lent.

Recommended Posts

Script de référence simple
Un simple script IDAPython pour nommer une fonction