1 van 1

Benchmark wiskundige software/libraries

Geplaatst: zo 13 dec 2009, 20:55
door jhnbk
Vanmiddag begon ik enkel Benchmark tests. Ik liet (voorlopig althans) Python (+numpy), Matlab en GNU octave de inverse nemen van een 100x100 matrix. Ik kwam tot volgende resultaten:

<div style="line-height: 0px;"><table cellpadding="0" cellspacing ="0" border="1" class="bbc">[tr][td]Test\software[/td][td]Python[/td][td]Octave[/td][td]Matlab[/td][/tr][tr][td]1[/td][td]0,037[/td][td]0,250[/td][td]0,049[/td][/tr][tr][td]2[/td][td]0,072[/td][td]0,188[/td][td]0,043[/td][/tr][tr][td]3[/td][td]0,073[/td][td]0,203[/td][td]0,038[/td][/tr][tr][td]4[/td][td]0,073[/td][td]0,203[/td][td]0,032[/td][/tr][tr][td]5[/td][td]0,073[/td][td]0,188[/td][td]0,020[/td][/tr][tr][td]6[/td][td]0,073[/td][td]0,203[/td][td]0,020[/td][/tr][tr][td]7[/td][td]0,073[/td][td]0,203[/td][td]0,021[/td][/tr][tr][td]8[/td][td]0,074[/td][td]0,188[/td][td]0,020[/td][/tr][tr][td]9[/td][td]0,074[/td][td]0,203[/td][td]0,024[/td][/tr][tr][td]10[/td][td]0,074[/td][td]0,188[/td][td]0,021[/td][/tr][tr][td] [/td][td] [/td][td] [/td][td] [/td][/tr][tr][td]Gem[/td][td]0,070[/td][td]0,202[/td][td]0,029[/td][/tr][tr][td]Stdev[/td][td]0,011[/td][td]0,019[/td][td]0,011[/td][/tr]</table>

Benchmark op windows XP SP3 1,6GHz 1G ram

(tijd in seconden)

Voorlopige conclusie is dat Matlab het snelst is maar dat Python niet moet onderdoen. Octave presteert ondermaats vind ik. Als iemand zin heeft de tests te herhalen met andere software:
100x100
(28.37 KiB) 105 keer gedownload
In Matlab & Octave gebruikte ik volgende code:

Code: Selecteer alles

for i=1:10

tic

a=dlmread('100x100.csv',';');

b=a^-1;

toc

end
In Python:

Code: Selecteer alles

from numpy import matrix

from timeit import *

t = Timer()

f=open("100x100.csv")

a=f.readlines()

A=matrix([[float(j) for j in i.split(";")] for i in a])

B=A**-1

print t.timeit()
Nu is mijn vraag eigenlijk deels wiskundig. Kan ik uit zulk één test afleiden welke software uit beste presteert voor matrixrekenen? Inverse oplossen is vrij cruciaal voor veel eindige elementen software. (Andere methoden voor het oplossen van B=AX is uiteraard ook mogelijk en zelfs efficiënter)

Zie ook http://www.scipy.org/PerformancePython

Re: Benchmark wiskundige software/libraries

Geplaatst: zo 13 dec 2009, 22:36
door Bart
Het inlezen van de file moet je buiten je benchmark doen.

Bij Ax=b ga je nooit de inverse van A nemen omdat, zoals je al zegt, er snellere methodes zijn. De benchmark is in dat opzicht zinloos. Matlab is bijvoorbeeld heel sterk in het oplossen van Ax = b (je kunt b / A schrijven om x te vinden)

Re: Benchmark wiskundige software/libraries

Geplaatst: ma 14 dec 2009, 08:59
door jhnbk
Matlab:

Elapsed time is 0.009887 seconds.

Elapsed time is 0.009759 seconds.

Elapsed time is 0.008594 seconds.

Elapsed time is 0.004649 seconds.

Elapsed time is 0.004490 seconds.

Elapsed time is 0.004452 seconds.

Elapsed time is 0.004472 seconds.

Elapsed time is 0.004528 seconds.

Elapsed time is 0.004556 seconds.

Elapsed time is 0.004536 seconds.

Python:

0.036383455517

0.0365347182901

0.0362466597919

0.0363384419237

0.0360924271116

0.0362205681072

0.0363641361208

0.0360395912628

0.0358953707697

0.036148735352

Octave:

Elapsed time is 0 seconds.

Elapsed time is 0 seconds.

Elapsed time is 0.015625 seconds.

Elapsed time is 0 seconds.

Elapsed time is 0 seconds.

Elapsed time is 0 seconds.

Elapsed time is 0.015625 seconds.

Elapsed time is 0 seconds.

Elapsed time is 0 seconds.

Elapsed time is 0.015625 seconds.

Als ik het inlezen niet meetel komt Python er het slechtste uit al is de "0" output van octave ook vreemd.

Re: Benchmark wiskundige software/libraries

Geplaatst: ma 14 dec 2009, 09:34
door Bart
Als ik het inlezen niet meetel komt Python er het slechtste uit
Dat is niet raar. Python is sneller in file handling dan Matlab dat is. Vandaar dat je dat ook niet in je benchmark moet meenemen.
al is de "0" output van octave ook vreemd.
Lijkt alsof Octave problemen met zijn timer (tic/toc) heeft

Re: Benchmark wiskundige software/libraries

Geplaatst: ma 14 dec 2009, 09:47
door jhnbk
Mja, zolang de berekeningen in python onder 1/10 seconde blijven denk ik dat python ook een sterke taal voor numerieke toepassingen is.

Op zich moet de programmeur de code zelf al wat optimaliseren.