Быстрый способ создания массивной матрицы случайных данных
Привет, я хочу сгенерировать матрицу случайных данных, скажем, строка *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