更快地计算平均值和差异
17次观看(过去30天)
显示旧的评论
接受的答案
约翰D 'Errico
2017年12月28日
编辑:约翰D 'Errico
2017年12月28日
得到更多的内存。大问题需要更多的记忆,或者一杯咖啡。坐下来,放松,拿出那本旧的《战争与和平》,读下去。
如果您的矩阵是1000x1000x1000,那么它有1e9个元素,每个元素将需要8字节的RAM来存储。这个矩阵使用了大约8g的RAM来存储。
现在,当您在数组上计算某些操作时,例如diff或连续元素之间的局部平均值,这将创建一个几乎相同大小的NEW数组。因此,一个新的数组也需要8g的RAM。
该数组的每一个拷贝都迫使MATLAB多分配8 gb的RAM。你的电脑有多少gb的内存?例如,我的现在有点老了,所以它总共只有8个演出。
当MATLAB用完内存时会做什么?它开始交换数据,使用虚拟内存。这变得很慢,非常快,即使它可以找到这样做的磁盘空间。
所以如果你想让你的计算更快,你需要更多的内存。
一个糟糕的选择可能是使用单打而不是双打。将矩阵创建为单个数组,现在它将需要4gb的RAM。它仍然会占用大量内存,但会稍微精简一些。代价当然是计算精度的损失。
2的评论
约翰D 'Errico
2017年12月28日
两个8gb阵列的副本需要16gb。不要忘记MATLAB本身会消耗一些RAM。所以不管怎么计算,只要你开始达到极限,你就会遇到问题。如果您的计算可以容忍使用单一,就往那个方向走。
如果您有一个实际的磁盘驱动器使用旋转盘片,您能做的最好的事情是将磁盘驱动器替换为SSD驱动器。这可以极大地提高VM访问速度,受限于内存和驱动器之间的总线速度。SSD驱动器没有那么贵。我的电脑很值得花这么多钱,能让我的电脑再愉快地运行几年。