Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有巨大的 n×n 矩阵A,其非零元素的索引为a = find(A)。我通过从 中a1删除一些元素获得了一个新列表a。我想在不使用循环的情况下拥有A索引矩阵。a1有什么建议么?为此目的有什么功能吗?
A
a = find(A)
a1
a
考虑到您的矩阵是“巨大的”(并且您的问题暗示它大部分为零),最好将其表示为稀疏矩阵:
[ii, jj] = ind2sub(size(A), a1); spA = sparse(ii, jj, A(a1), size(A, 1), size(A, 2));
在稀疏矩阵上操作时可能会有显着的加速。如果您需要获取完整的矩阵,请使用full:
full
newA = full(spA);
使用矢量索引。在不知道你的矩阵有多么“巨大”的情况下A,假设你仍然可以在matlab的内存中一次性处理它,只是:
B(size(A,1),size(A,2))=0; B(a1)=A(a1);
现在与仅由 给出的索引B相同。Aa1
B