Extract part of a sparse matrix

1 visualizzazione (ultimi 30 giorni)
Dear users,
I'm trying to find a way to extract a block from a big sparse matrix without being computationally costly. Here what I have
A - sparse matrix n*n i - a vector with the indices I want to extract (i = [5556 68424 85345 925325], for example)
I can do what I want like this:
A_new = A(i,i).
However, this indexing that is used in full matrices is not effective for sparse. how can I do this operation in an effective way?
Thank you in advance,
Pedro Montenegro University of Porto, Portugal

Risposta accettata

Azzi Abdelmalek
Azzi Abdelmalek il 2 Mag 2014
i = [5556 68424 85345 925325];
ii=sub2ind(size(A),i,i)
A_new = A(ii)
  2 Commenti
Pedro Montenegro
Pedro Montenegro il 2 Mag 2014
Hello Azzi,
Thank you for your answer. However, the result that I want is not the same. Lets do it with a simple full matrix for better understanding:
a=magic(5)
a =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
i=[2 3];
a(i,i) =
5 7
6 13
This is the answer that I want. If i run your code I'll have:
ii=sub2ind(size(a),i,i)
ii =
7 13
a(ii) =
5 13
Which is different from what i want.
Thank you
Azzi Abdelmalek
Azzi Abdelmalek il 2 Mag 2014
[ii,jj]=ndgrid(i,i)
idx=sub2ind(size(a),ii(:),jj(:))
a(idx)

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by