MATLAB: How to make multiple vectors the same length

interpolation

Hi all,
I am struggeling with an interpolation task and dont make any process.
I have calculated muscle thickness values across the total muscle length of several subjects. Now I want to compare the region specific differences between subjects but of course all subjects have different muscle length (and thus I have vectors with more values (if muscle has greater length) and smaller vectors (for short muscles).
How could I interpolate these data so that each vector has the same length? I have attached a data sheet (each subjects has an own column).
Thank you for your help!!

Best Answer

Because each of the input columns has their own domain, you will have to loop over the columns and interpolate each column separately, something like this:
inp = xlsread('Sample.xlsx');
out = inp; % preallocate
num = size(out,1);
for k = 1:size(out,2)
idx = ~isnan(inp(:,k));
xi = 1:nnz(idx);
xo = linspace(1,nnz(idx),num);
out(:,k) = interp1(xi,inp(idx,k),xo);
end
Giving:
>> inp % raw data
inp =
0.3487 0.6447 0.8550 0.6123 0.4617 0.7680 0.8120 0.4800 0.9830
0.7033 0.5983 0.8143 0.7540 0.6167 0.6230 0.6570 0.6357 0.7357
0.7700 0.6753 0.2363 0.7473 0.7600 0.6143 0.8490 0.8643 0.6917
0.7583 0.7740 0.7683 0.9083 0.7167 0.5497 0.8620 0.8520 0.8227
0.8963 0.8700 0.8983 0.9853 0.8053 0.6887 0.9170 0.9657 0.9020
0.8990 1.0077 0.9497 0.9460 0.8480 0.7230 0.8993 1.0130 0.9747
0.9040 0.9130 0.9560 1.0037 0.8913 0.7640 0.9340 1.1217 1.0367
0.8550 0.9693 0.9565 1.0513 0.8900 0.7763 1.0707 1.1203 1.0160
0.9277 0.9963 0.9220 NaN 0.9037 0.8657 1.1093 1.1407 1.0457
0.9290 1.0790 0.8823 NaN 0.8880 0.8247 1.0657 1.1763 1.0410
NaN 0.9413 0.7607 NaN 1.0247 NaN 1.0347 1.1750 1.0693
NaN NaN NaN NaN 0.9120 NaN 1.0880 1.2743 1.0937
NaN NaN NaN NaN NaN NaN 1.1810 1.0443 1.1110
NaN NaN NaN NaN NaN NaN 1.2476 NaN NaN
NaN NaN NaN NaN NaN NaN 1.3207 NaN NaN
>> out % interpolated data
out =
0.3487 0.6447 0.8550 0.6123 0.4617 0.7680 0.8120 0.4800 0.9830
0.5767 0.6116 0.8260 0.6832 0.5835 0.6748 0.6570 0.6134 0.7710
0.7224 0.6313 0.5666 0.7540 0.6986 0.6205 0.8490 0.7990 0.7042
0.7652 0.6894 0.3123 0.7507 0.7445 0.6150 0.8620 0.8573 0.7665
0.7633 0.7599 0.6923 0.7473 0.7293 0.5774 0.9170 0.9007 0.8567
0.7879 0.8289 0.8426 0.8278 0.7990 0.5795 0.8993 0.9792 0.9228
0.8766 0.9093 0.9130 0.9083 0.8358 0.6688 0.9340 1.0285 0.9835
0.8977 1.0077 0.9497 0.9468 0.8697 0.7058 1.0707 1.1217 1.0367
0.8997 0.9400 0.9542 0.9853 0.8910 0.7289 1.1093 1.1205 1.0190
0.9029 0.9371 0.9562 0.9657 0.8910 0.7552 1.0657 1.1349 1.0372
0.8830 0.9732 0.9515 0.9460 0.9017 0.7693 1.0347 1.1610 1.0430
0.8602 0.9925 0.9269 0.9748 0.8936 0.7827 1.0880 1.1758 1.0531
0.9069 1.0436 0.8993 1.0037 0.9466 0.8401 1.1810 1.2034 1.0763
0.9281 1.0397 0.8476 1.0275 1.0005 0.8510 1.2476 1.2415 1.0961
0.9290 0.9413 0.7607 1.0513 0.9120 0.8247 1.3207 1.0443 1.1110
>>