2015-03-05 3 views
1

Привет Я хочу сгенерировать матрицу случайных данных, например row * col = 30000 * 500000. Я пытался использовать VBA в Excel, чтобы замедлить работу; 64-битный R был заморожен, даже я использовал пакет bigmemory на моем ящике памяти 8G. Чтобы сделать это как можно быстрее, следует ли использовать C? Является ли параллельное программирование на Java 8 полезным для этой проблемы? У кого-то был опыт с этим? Очень признателен!быстрый способ генерации массивной матрицы случайных данных

ответ

0

Если каждое из ваших случайных чисел занимает четыре байта, вам необходимо 60000000000 байт, то есть 60э9 байт или 55 гигабайт. Неудивительно, что вы не можете держать их все сразу в памяти на компьютере с 8 гигабайтами.

Если вам действительно нужно много случайных чисел (с какой целью?), Ваш единственный шанс записать их в большой файл, а затем использовать их через файл acess. Альтернативно, просто создавайте их на лету, когда это необходимо; что лучше зависит от вашего конкретного приложения.

Если вам также нужно хорошее качество, я бы предложил использовать компилятор/библиотеку с хорошим встроенным случайным номером gernerator.

Вот небольшая примерная программа Fortran о том, как может выглядеть программа для записи такого файла. Не стесняйтесь адаптироваться к выбранному вами языку.

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

Спасибо, это определенно имеет смысл для меня. – Kevin

Смежные вопросы