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
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
Merci, cela a vraiment du sens pour moi. – Kevin