Find indices of points in meshgrid-like data
Show older comments
Hi,
I'm looking for an optimal solution to the following problem:
You are given a vector containing coordinates x,y for set of points e.g.:
A = [2 3; 3 4; 1 1];
given that the full-data is structured in a matrix form (meshgrid-like)
[X,Y] = meshgrid(1:5, 1:5);
find indices B, such that:
A = [X(B), Y(B)];
I am able to solve this problem simply by looping over all points in A and finding the index with
for pt = 1:size(A,1);
index(pt) = find(A(pt,1)== X & A(pt,2) == Y);
end
However I'm not satisfied with the performance of this solution as I am running through ~50,000 data points around 300 times, and I'd love to replace the for loop with some vectorized formula.
Any help would be highly appreciated!
Thanks,
Alex
Accepted Answer
More Answers (1)
Bish Erbas
on 26 Sep 2018
How about this?
A = [2 3; 3 4; 1 1];
[X,Y] = meshgrid(1:5, 1:5);
XIdxCell = arrayfun(@(x) find(X==x),A(:,1),'UniformOutput',false);
YIdxCell = arrayfun(@(x) find(Y==x),A(:,2),'UniformOutput',false);
XIdx = cell2mat(XIdxCell);
YIdx = cell2mat(YIdxCell);
A = [X(XIdx), Y(YIdx)]
Categories
Find more on Scope Variables and Generate Names in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!