MATLAB错误:矩阵太大,无法返回线性索引

时间:2018-12-29 18:57:11

标签: matlab

我正在尝试在大型稀疏矩阵K(19683000x19683000)中找到所有非零元素。我用find首先返回线性索引。

val = K(K~=0);
inds = find(K~=0);
[j, i] = ind2sub(size(K), inds);
% [j, i] = find(K~=0);
i = full(i);
j = full(j);

这带来了一些错误:

Error using find
Matrix is too large to return linear indices.
Use [i,j] = find(S) for sparse matrix.
Error in (line 82)
inds = find(K~=0);
Error in run (line 64)
evalin('caller', [script ';']);

知道发生了什么以及如何避免发生这种情况?

1 个答案:

答案 0 :(得分:3)

我对该错误不熟悉(可能是因为我从未使用过如此大的矩阵)。该错误可能与double变量只能exactly represent integers2^53个事实有关。矩阵中的元素数量不超过该限制,但是接近。

也许您可以通过获取行索引和列索引,然后从这些索引中手动计算线性索引来回避问题,直到2^53

[ii,jj] = find(K);
inds = ii + (jj-1)*size(K,1);

如果需要,您可以使用2^64线性索引而不是uint64将限制提高到double

[ii,jj] = find(K);
inds = uint64(ii) + (uint64(jj)-1)*size(K,1);