2015-03-05 1 views
1

Salut Je veux générer une matrice de données aléatoires, par exemple row * col = 30000 * 500000. J'ai essayé d'utiliser VBA dans Excel, façon de ralentir; 64 bit R est gelé même si j'ai utilisé le paquet bigmemory sur ma boîte mémoire 8G. Afin de le faire aussi vite que possible, devrais-je utiliser C? La programmation parallèle dans Java 8 est-elle utile sur ce problème? Quelqu'un a-t-il eu de l'expérience avec ça? Très appréciée!un moyen rapide de générer une matrice massive de données aléatoires

Répondre

0

Si chacun de vos nombres aléatoires prend quatre octets, vous avez besoin d'un total de 60000000000 octets, soit 60e9 octets ou 55 GiB. Il n'est donc pas étonnant que vous ne puissiez pas les garder tous en même temps en mémoire sur un ordinateur 8 GiB.

Si vous avez vraiment besoin de tant de nombres aléatoires (dans quel but?) Votre seule chance est de les écrire dans un gros fichier, puis de les utiliser via un fichier. Alternativement, il suffit de les générer à la volée en cas de besoin; ce qui vaut mieux dépend de votre application particulière.

Si vous avez également besoin d'une bonne qualité, je suggère d'utiliser un compilateur/une bibliothèque avec un bon gernerator à nombre aléatoire intégré.

Voici un court exemple de programme Fortran sur la façon dont un programme pour écrire un tel fichier pourrait ressembler. N'hésitez pas à vous adapter à la langue de votre choix.

program random 
    implicit none 
    integer, parameter :: nx = 30000, ny=500000 
    real, dimension(ny) :: r ! A real array of length ny, i.e. 500000 
    integer :: i 

    open(20,file="random.dat",form="unformatted",access="stream") ! Byte stream access 
    do i=1,nx ! Do this nx times 
    call random_number(r) ! Fill up the array with pseudorandom numbers 
    write (20) r ! Write it to the file 
    end do 
    close(20) 
end program random 
+0

Merci, cela a vraiment du sens pour moi. – Kevin