在MATLAB中以大矩阵过滤数据

时间:2016-02-09 16:48:42

标签: matlab out-of-memory

在MATLAB中,我正在处理一个大小为[200K * 150K]的矩阵URm,其元素在[0-5]之间。

我想过滤这些值,这样我就可以访问其值为[4-5]和[1-2]的矩阵输入。我在第一种情况下取​​得了成功,但在尝试使用第二种情况时遇到错误。

  Upos = sparse(URm > 3)       ;
  Uneg = sparse(URm<3 & URm>0) ;

我可以获得Upos但是对于Uneg,我遇到以下错误:

Error using  < 
Requested 30711160620x1 (228.8GB) array exceeds maximum array size   preference. Creation
of arrays greater than this limit may take a long time and cause MATLAB to become
unresponsive. See array size limit or preference panel for more information.

Error in Provide_Information_about_URm (line 14)
Uneg = sparse(URm<3 & URm>0)   

错误更可能源于MATLAB在&amp;之前生成内部矩阵的事实。应用的操作需要很大的空间。您如何看待问题可以解决?提前感谢您的意见。

1 个答案:

答案 0 :(得分:4)

您的表达式URm<3对于多个值都是正确的,包括URm的全部零,这几乎可能是每个元素。这导致了一个非常大的稀疏矩阵,只有很少的非零元素。

而是以一种永远不会选择零的方式重写逻辑

Uneg=xor(URm>=3,URm>0)