0

我有巨大的 n×n 矩阵A,其非零元素的索引为a = find(A)。我通过从 中a1删除一些元素获得了一个新列表a。我想在不使用循环的情况下拥有A索引矩阵。a1有什么建议么?为此目的有什么功能吗?

4

2 回答 2

2

考虑到您的矩阵是“巨大的”(并且您的问题暗示它大部分为零),最好将其表示为稀疏矩阵

[ii, jj] = ind2sub(size(A), a1);
spA = sparse(ii, jj, A(a1), size(A, 1), size(A, 2));

在稀疏矩阵上操作时可能会有显着的加速。如果您需要获取完整的矩阵,请使用full

newA = full(spA);
于 2013-05-26T07:49:48.127 回答
1

使用矢量索引。在不知道你的矩阵有多么“巨大”的情况下A,假设你仍然可以在matlab的内存中一次性处理它,只是:

B(size(A,1),size(A,2))=0;
B(a1)=A(a1);

现在与仅由 给出的索引B相同。Aa1

于 2013-05-26T07:44:28.690 回答