Pagina 1 di 3

Una comparazione tra software di analisi numerica

MessaggioInviato: 5 dic 2012, 13:02
da DirtyDeeds
Ecco qui una comparazione tra diversi software di analisi numerica (Matlab, Octave, FreeMat, Scilab, R e IDL).

Mi sembra venga aggiornata ogni anno.

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 5 dic 2012, 15:47
da carlomariamanenti
Muchas gracias! Esta información es muy, muy interesante! :ok:

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 21 dic 2012, 10:43
da serbring
grazie mille, lo trovo molto interessante

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 23 dic 2012, 17:17
da F0112358
=D>

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 25 nov 2013, 13:10
da DirtyDeeds
Quando ne ho l'occasione faccio qualche piccolo confronto tra i vari software che mi capita di usare. Senza pretesa di sistematicità, sono semplicemente casi su cui mi è capitato di lavorare, ho deciso di riportare qui alcuni risultati. Il confronto sarà principalmente tra Octave 3.6.4, Scilab 5.4.1 e Mathematica 9.0.1. L'idea è quella di comparare sia la velocità che la facilità di programmare alcune operazioni. Visto il crescente uso di Python in ambito scientifico, se ci fosse qualche "pythonista" che avesse voglia di realizzare anche dei programmini che facciano le stesse operazioni, potremmo aggiungerlo alle comparazioni.

I test sono stati fatti su una macchina i7-3770 @ 3.40 GHz 8 cores.

Nel primo confronto ho fatto generare ai programmi una matrice 20*1000000 di numeri casuali; per ognuna delle 10^6 colonne ho fatto calcolare la mediana. Scilab esce un po' acciaccato da questo test.

1) Octave

La funzione è questa:

Codice: Seleziona tutto
function [t] = test_median(m,n)
    Y = normrnd (0, 1, m, n);
    tic();
    M = median(Y,1);
    t = toc();
end


Richiamata con

Codice: Seleziona tutto
test_median(20,1000000)


Il tempo di calcolo della mediana è circa 0.3 s.

2) Scilab

La funzione è questa:

Codice: Seleziona tutto
function [t] = test_median(m,n)
    Y = grand(m, n, "nor", 0, 1);
    tic();
    M = median(Y,'r');
    t = toc();
endfunction


Richiamata con

Codice: Seleziona tutto
test_median(20,1000000)


Per poter eseguire la funzione con dimensioni così grandi è necessario incrementare la dimensione dello stack con

Codice: Seleziona tutto
stacksize('max')


Il tempo di calcolo della mediana è risultato di circa 2016 s :!:

3) Mathematica

Il programma eseguito è

Codice: Seleziona tutto
Y = RandomVariate[NormalDistribution[0, 1], {20, 1000000}];
Timing[Median[Y];]


E il tempo di calcolo è stato di circa 1.2 s.

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 25 nov 2013, 14:07
da angus
Codice: Seleziona tutto
def test_ey(m,n):
    import numpy as np
    a=np.array(np.random.random_sample(size=(m,n)))
    b=np.median(a, axis=1)

test_ey(20,1000000)

ottengo circa 2.55 s
ma sicuramente si può ottimizzare, perché io sono un "pythonista" della domenica

(CPU i3 550 @ 3.20GHz)

Come confronto, con octave e la funzione del post precedente ottengo
Codice: Seleziona tutto
octave:2> test_median(20,1000000)
ans =  0.41516

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 25 nov 2013, 15:16
da DirtyDeeds
Grazie Foto Utenteangus!

Con il tuo programma ho ottenuto circa 1.7 s.

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 25 nov 2013, 15:27
da PietroBaima
se hai Mathematica ancora aperto prova con

Codice: Seleziona tutto
Timing[Median[RandomVariate[NormalDistribution[0.0, 1.0], {20.0, 10^6}];];]


Ciao,
Pietro.

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 25 nov 2013, 16:32
da cronos80
[quote="angus"]
Codice: Seleziona tutto
import numpy as np

Per equilibrare la riga sopra non va messa nel computo del test, in quanto gli altri programmi le librerie le caricano all'avvio, di conseguenza non si vedono nei risultati.
Prova con:
Codice: Seleziona tutto
import numpy
import time

def test_ey(m,n):   
    a=numpy.array(numpy.random.random_sample(size=(m,n)))
    b=numpy.median(a, axis=1)

starttime=time.clock()
test_ey(20,1000000)
stoptime=time.clock()
print("%ds"%(stoptime-starttime))

Re: Una comparazione tra software di analisi numerica

MessaggioInviato: 25 nov 2013, 18:28
da DirtyDeeds
PietroBaima ha scritto:se hai Mathematica ancora aperto prova con

Codice: Seleziona tutto
Timing[Median[RandomVariate[NormalDistribution[0.0, 1.0], {20.0, 10^6}];];]


Provato ora, viene 1.8 s circa. Però mi sembra che così si misuri anche il tempo di generazione dei numeri casuali, mentre negli altri misuro solo il tempo di calcolo della mediana che, visti i risultati di Scilab, sembrerebbe quello che può dare più problemi.