finding approximate indices in a monotonically increasing array
조회 수: 4 (최근 30일)
이전 댓글 표시
I need to find the indices of an entry in a monotonically increasing array, where the value of this indices is "ref"(as shown below)
I create my increasing array "t" as follow
dt=1/10e9;
N=13600000;
t=((0:N-1)*dt);
ref=1.39459e-05;
I've already tried using the find function but it leads to incorrect results or multiple indices or no answers at all.
can anyone suggest any way I can get this working
댓글 수: 1
Jan
2013년 1월 31일
Please post the find command you have used, when you want us to suggest an improvement.
채택된 답변
Shashank Prasanna
2013년 1월 30일
You can use Nearest Neighbor search. If you have stats toolbox:
f = knnsearch(t',ref)
f =
139460
>> t(f)
ans =
1.39459e-05
IF you don't have the stats toolbox:
>> tri = delaunayn(t');
f = dsearchn(t',tri,ref)
f =
139460
Because you have so many points you have to be patient since it takes time.
댓글 수: 2
Sean de Wolski
2013년 1월 31일
There is so much extra working put into calculating the Delaunay triangulation for all of t when all you need is a simple histogram calculation of one element! I would not recommend this approach.
Foosball?
Shashank Prasanna
2013년 1월 31일
I agree, i just like using nearest neighbor search, and it always works. lets go.
추가 답변 (3개)
Sean de Wolski
2013년 1월 30일
[~,idx] = histc(ref,t);
Use histc() to find the bin containing ref.
댓글 수: 1
Jan
2013년 1월 31일
HISTC is a fast and efficient C-Mex function, which does not create the temporary vector abs(t - ref) and performs a binary search, which is the optimal strategy in theorie. +1
Jan
2013년 1월 31일
dt = 10e-9;
N = 13600000;
t = (0:N-1)*dt;
ref = 1.39459e-05;
[value, index] = min(abs(t - ref));
But without doubt, the binary search of histc is smarter than comparing all values in this brute force approach.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!