Finding Closest Data Point

6 次查看(过去 30 天)
I have one matrix with data in the first column and time stamps in the second column (datamatrix.mat). The next matrix contains spiketimes (spiketimematrix.mat). I want to get the data point in the first column of first matrix that is the closest time point corresponding to the spike times in spiketimematrix.mat. For example, the first spiketime is 166.1670, which corresponds to the closet time point of 166.1696 and corresponds with the data point 2.5281.

采纳的回答

Image Analyst
Image Analyst 2016-10-25
Try something like
% Find all time differences:
timeDiffs = abs(timeStamps - spikeTimes);
% Find out which has the smallest difference:
[minTimeDiff, indexOfMin] = min(timeDiffs);
% Get the value from column 1.
result = dataColumn1(indexOfMin)
  5 个评论
Krispy Scripts
Krispy Scripts 2016-10-25
Would this be simpler if instead of getting the closest, I got the one greater than or equal to?
Image Analyst
Image Analyst 2016-10-26
Sorry - that's what I get for tossing something off the top of my head and not actually testing it. Ignore that code (I'll delete it) and use this instead:
numPoints1 = 6;
timeStamps = rand(numPoints1, 1) % Sample data.
numPoints2 = 3;
spikeTimes = rand(numPoints2, 1) % Sample data.
t1 = [timeStamps, zeros(length(timeStamps), 1)];
t2 = [spikeTimes, zeros(length(spikeTimes), 1)];
distances = pdist2(t1, t2)
minDistance = min(distances(distances>0))
[row, column] = find(distances == minDistance)
fprintf('The minimum time difference is %f and goes between\n timeStamp(%d) = %f, and\n spikeTimes(%d) = %f\n',...
minDistance, row, timeStamps(row), column, spikeTimes(column));

请先登录,再进行评论。

更多回答(1 个)

Roger Stafford
Roger Stafford 2016-10-25
I recommend you use the ‘pdist2’ function using the “Smallest” option. It is described at:
https://www.mathworks.com/help/stats/pdist2.html

类别

Help CenterFile Exchange 中查找有关 Electrophysiology 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by