3

我有一个包含 100000 列(变量)和 100 行(观察)的矩阵。我需要将 (pearson) 与所有相关联。我使用 corrcoef,因为我发现它比 corr 快得多。当我采用 25000 列的矩阵时,操作需要 15 秒。但是,当我在几分钟后将大小增加到 50000 时,我的 matlab RAM 增加到 16Gb,并且 matlab(包括 windows)开始冻结。有什么建议么?有拆分专利吗?逐列计算变得非常低效......

感谢您的帮助,瓦迪姆

4

1 回答 1

2

如果没有 64 位版本的 matlab 加上足够的内存来存储该大数组,或者以其他方式存储该数组,那么对如此大的数组进行蛮力计算是不可能的。您可以离线存储阵列,只在使用时带入您需要的东西。

此外,如果这些数字总是小整数,则使用 uint8 或 int8,或逻辑数组,甚至是单个数组,与双数组相比,所有这些都将减少内存需求。如果数组是稀疏的,那就更好了,然后使用稀疏数组操作。

另一种方法是使用并行计算工具箱(和MATLAB 分布式计算服务器)同时利用多台机器的内存。这将允许您编写:

matlabpool open <a large number>
x = distributed.zeros( 100000, 100 );

另请参阅此线程以处理大矩阵...

于 2013-01-22T21:56:12.447 回答