27 views (last 30 days)

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

Image Analyst
on 26 Jan 2021 at 22:01

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.

Image Analyst
on 29 Jan 2021 at 22:06

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.

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

Start Hunting!
## 0 Comments

Sign in to comment.