Быстрый способ создания массивной матрицы случайных данных

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

1 ответ

Решение

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

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

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

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

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
Другие вопросы по тегам