在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;之前生成内部矩阵的事实。应用的操作需要很大的空间。您如何看待问题可以解决?提前感谢您的意见。
答案 0 :(得分:4)
您的表达式URm<3
对于多个值都是正确的,包括URm
的全部零,这几乎可能是每个元素。这导致了一个非常大的稀疏矩阵,只有很少的非零元素。
而是以一种永远不会选择零的方式重写逻辑
Uneg=xor(URm>=3,URm>0)