Extract only diagonal elements from matrix
Ältere Kommentare anzeigen
I have a matrix in one variable and a list of coordinates in another variable. Is there a way to extract only the matching pairs of coordinate from the matrix? I.e. X(1),Y(1); X(2), Y(2)...
I can extract all of the permutations (X1, Y1; X1 Y2 ...X2,Y1 ... etc) and then take the diagonal, but I was wondering if there was a simple solution I'm missing to only extract the matched pairs.
Thanks,
Will
%Data
mat = rand(100);
%Coordinates
x_coord = round(rand(10,1)*100);
y_coord = round(rand(10,1)*100);
%Extract coordinates
extracted_coord = diag(mat(x_coord,y_coord));
Akzeptierte Antwort
Weitere Antworten (2)
For a one line solution you can use linear indices via sub2ind:
v = mat(sub2ind(size(mat), 1:length(mat), 1:length(mat));
However i don't know about performance in comparison to the for-loop.
max
am 24 Aug. 2024
0 Stimmen
For a square matrix A, if coordinates are taken from vectors say, xc -> row index and yc -> column index, then all the required elements can be accessed by the single command A((yc-1)*size(A,1)+xc)
Example:
n = 4;
A = round(rand(n)*10)
xc = mod(ceil(rand(1,n)*10),n)+1
yc = mod(ceil(rand(1,n)*10),n)+1
A((yc-1)*size(A,1)+xc)
1 Kommentar
max
am 24 Aug. 2024
It works for non square matrix also...
Kategorien
Mehr zu Mathematics finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!