从索引创建一个新矩阵

时间:2013-05-26 07:39:05

标签: matlab matrix matrix-indexing

我有一个巨大的n×n矩阵A,以及a = find(A)的非零元素的索引。我通过删除a1中的一些元素获得了新列表a。我想在A中使用索引的矩阵a1而不使用循环。有什么建议?是否有任何功能用于此目的?

2 个答案:

答案 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);

现在BA相同,只有a1给出的索引。