我有一个包含 100000 列(变量)和 100 行(观察)的矩阵。我需要将 (pearson) 与所有相关联。我使用 corrcoef,因为我发现它比 corr 快得多。当我采用 25000 列的矩阵时,操作需要 15 秒。但是,当我在几分钟后将大小增加到 50000 时,我的 matlab RAM 增加到 16Gb,并且 matlab(包括 windows)开始冻结。有什么建议么?有拆分专利吗?逐列计算变得非常低效......
感谢您的帮助,瓦迪姆
我有一个包含 100000 列(变量)和 100 行(观察)的矩阵。我需要将 (pearson) 与所有相关联。我使用 corrcoef,因为我发现它比 corr 快得多。当我采用 25000 列的矩阵时,操作需要 15 秒。但是,当我在几分钟后将大小增加到 50000 时,我的 matlab RAM 增加到 16Gb,并且 matlab(包括 windows)开始冻结。有什么建议么?有拆分专利吗?逐列计算变得非常低效......
感谢您的帮助,瓦迪姆
如果没有 64 位版本的 matlab 加上足够的内存来存储该大数组,或者以其他方式存储该数组,那么对如此大的数组进行蛮力计算是不可能的。您可以离线存储阵列,只在使用时带入您需要的东西。
此外,如果这些数字总是小整数,则使用 uint8 或 int8,或逻辑数组,甚至是单个数组,与双数组相比,所有这些都将减少内存需求。如果数组是稀疏的,那就更好了,然后使用稀疏数组操作。
另一种方法是使用并行计算工具箱(和MATLAB 分布式计算服务器)同时利用多台机器的内存。这将允许您编写:
matlabpool open <a large number>
x = distributed.zeros( 100000, 100 );
另请参阅此线程以处理大矩阵...