我有一个巨大的n×n矩阵A
,以及a = find(A)
的非零元素的索引。我通过删除a1
中的一些元素获得了新列表a
。我想在A
中使用索引的矩阵a1
而不使用循环。有什么建议?是否有任何功能用于此目的?
答案 0 :(得分:2)
考虑到你的矩阵是“巨大的”(并且你的问题暗示它主要是零),也许最好将它表示为sparse matrix:
[ii, jj] = ind2sub(size(A), a1);
spA = sparse(ii, jj, A(a1), size(A, 1), size(A, 2));
在稀疏矩阵上运行时可能会有显着的加速。如果您需要获取完整的matrice,请使用full
:
newA = full(spA);
答案 1 :(得分:1)
使用矢量索引。如果你真的不知道矩阵A
是多么“巨大”,但假设你仍然可以在matlab的内存中处理它,只需:
B(size(A,1),size(A,2))=0;
B(a1)=A(a1);
现在B
与A
相同,只有a1
给出的索引。