1

こんにちは、row*col = 30000*500000 のようなランダム データのマトリックスを生成したいと考えています。ExcelでVBAを使用してみましたが、遅くなりました。8G メモリ ボックスで bigmemory パッケージを使用しても、64 ビット R がフリーズしました。できるだけ早くそれを行うには、C を使用する必要がありますか? Java 8 での並列プログラミングは、この問題に役立ちますか? 誰でもこれを経験したことがありますか?とても有難い!

4

1 に答える 1

0

乱数がそれぞれ 4 バイトかかる場合、合計 60000000000 バイト、つまり 60e9 バイトまたは 55 GiB が必要です。8 GiB コンピューターのメモリに一度にすべてを保持できないのも不思議ではありません。

本当に多くの乱数が必要な場合 (何の目的で?)、それらを大きなファイルに書き込んでから、ファイル アクセス経由で使用するしかありません。または、必要に応じてオンザフライで生成します。どちらが良いかは、特定のアプリケーションによって異なります。

高品質も必要な場合は、適切な乱数生成器が組み込まれたコンパイラ/ライブラリを使用することをお勧めします。

以下は、そのようなファイルを書き込むプログラムがどのように見えるかを示す短い 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
于 2015-03-05T07:50:01.103 に答える