Extract only diagonal elements from matrix
400 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Will Bassett
le 26 Jan 2021
Modifié(e) : Florian
le 9 Nov 2023
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));
0 commentaires
Réponse acceptée
Image Analyst
le 26 Jan 2021
You can do this, where m is your matrix, and v is the vector of extracted values from the x,y locations
v = zeros(1, length(X));
for k = 1 : length(X)
row = Y(k);
col = X(k);
v(k) = m(row, col);
end
Then just repeat with a scrambled x and y - I'm sure there is some function for that. Put the various v into a matrix and use eye() to extract the diagonal.
3 commentaires
Image Analyst
le 29 Jan 2021
How long was it taking?
I did a million points and it took about 78 milliseconds. If I use 1000 points, it's 0.0003 seconds. Just how many points are you going to use, and what kind of speed do you require?
mat = rand(100);
[rows, columns] = size(mat)
numPoints = 1000000
X = ceil(rand(numPoints,1)*columns);
Y = ceil(rand(numPoints,1)*rows);
tic
v = zeros(1, length(X));
for k = 1 : length(X)
row = Y(k);
col = X(k);
v(k) = mat(row, col);
end
toc
Elapsed time is 0.078826 seconds.
Voir également
Catégories
En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!