Fast interp1 on multiple vectors, same X, but different V and Xq per vector
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have many (numVec) 1-D vectors, each of which is sampled at the same many (numSamp) times. I want to do 1-D interpolation for all the vectors. I have a matrix interrogation times (numOutputs x numVec). I want the result to be the the interpolated values also dimension-ed (numOutputs x numVec). I do not need any interpolation across vectors. I do this in an inner loop and would like this to be very fast. Do you know the fastest way to accomplish this?
Simple example:
times_sampled = [0, 1];
data = [1, 2; 5, 6; 20, 21]';
times_interrogated = [.2,.3;.44,.44;.5,.9]';
too_much_data = interp1(times_sampled, data, times_interrogated );
for iVec = 1:size(data, 2)
requested_data(:, iVec) = too_much_data(:, iVec, iVec);
end
Desired Output:
requested_data =
1.2000 5.4400 20.5000
1.3000 5.4400 20.9000
Slow example:
data = rand(10000,512);
times = [0 : size(data, 1) - 1] / size(data, 1);
times_interrogated = rand(1000, 512);
too_much_data = interp1(times, data, times_interrogated );
for iVec = 1:size(data, 2)
requested_data(:, iVec) = too_much_data(:, iVec, iVec);
end
Is there a way to do this faster (without generating all the extra data)? (I tried just looping over interp1, but it was very slow.)
Thanks! -Brian
0 Kommentare
Antworten (1)
OCDER
am 14 Aug. 2018
The for loop was pretty fast for me. See the timing results below:
data = rand(10000,512);
times = [0 : size(data, 1) - 1] / size(data, 1);
times_interrogated = rand(1000, 512);
requested_data = zeros(size(times_interrogated, 1), size(data, 2));
tic
for iVec = 1:size(data, 2)
requested_data(:, iVec) = interp1(times(:), data(:, iVec), times_interrogated(:, iVec));
end
toc %0.094757 s
requested_data2 = zeros(size(times_interrogated, 1), size(data, 2));
tic
too_much_data = interp1(times(:), data, times_interrogated);
for iVec = 1:size(data, 2)
requested_data2(:, iVec) = too_much_data(:, iVec, iVec);
end
toc %2.813630 s
0 Kommentare
Siehe auch
Kategorien
Mehr zu Interpolation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!