大家好,目前我有一个问题困扰,看看大家能不能给点建议?
我的思路是:
for i=1:200
for j=1:50000
...生成数1...
...生成数2...
...生成数3...
...生成数4...
...生成数5...
# 如何在这里把生成数1,2,3,4,5分别存下来?
end
end
我有几种解决办法,不知道哪种比较好
- 每个数对应生成200个文件,然后将50000次循环内得到的数值直接输出到文件中
- 每个数对应生成200个文件,然后将50000次循环内得到的数值,先放在一个数组中,然后将数组输出到文件中
- 一共生成200个文件,然后将50000次循环内得到的数值,都放在csv文件中,这样相当于,一个csv文件中有50000行5列的数据
这是我目前采用的方法
我现在采用的方法是,提前设置了200个csv文件,然后在50000次循环中依次讲我计算出的5个数据输出到一个csv文件中,但是这样对相当于对一个csv文件读写50000次,内存可能吃不消,所以我希望找到一种能够尽量降低内存使用量的一种方法。
我担心的地方:
因为循环很大,每次都产生5个新的数值,这样直接放入数组或者文件中,会不会使得占用的内存很大,然后导致程序变慢甚至卡死?
不知道大家有没有什么好方法呀?
谢谢你的回复,但是考虑到以后对这些数据的处理工作,我现在采用的方法是使用自己熟悉的csv。不知道这种思路下有没有好的方法呢?
我提前设置了200个csv文件,然后在50000次循环中依次将我计算出的5个数据输出到一个csv文件中,但是这样对相当于对一个csv文件读写50000次,内存可能吃不消,所以我希望找到一种能够尽量降低内存使用量的一种方法。
數據大了csv不僅從讀取速度和內存上都是瓶頸。上面@Roger 提到的庫就是為了解決這樣的問題。建議你否定這個選擇之前看看文檔試一試
谢谢~~~~
现在,按照上面的思路我写的程序已经可以运行了,速度适中,大概500秒左右。
下一步我准备按照您和Roger说的方法进行改进~~~~
谢谢~~~~
輸入輸出先不管,你估算一下所有數組加給來有多少?可以重複利用的空間有多少?如果內存夠大,就都放在內存里,在雙循環外面讀寫。文件讀寫不是內存問題而是速度問題。I/O和操作系統打交道都會很慢,最好不要放在循環裡面。
如果內存不夠再分批讀寫,共享部份內存。
怎么估计所有数组加起来有多少呢?以及怎么知道可以重复利用的空间有多少呀?利用@time中显示的占用内存吗?
不好意思,我不太懂这些…
julia> rand(1)
1-element Array{Float64,1}:
0.722778
julia> sizeof(rand(1,1))
8
julia> sizeof(rand(200, 5000))
8000000
julia> sizeof(rand(200, 5000, 5))
40000000
单位是字节(B)。所以你的总共数据是40MB,小菜一碟。