a small problem with interpolation
1 次查看(过去 30 天)
显示 更早的评论
Dear all,
I have
A={ [NaN] [ NaN] [ NaN] [ NaN] [ NaN] [ NaN]
[ NaN] [ NaN] [ NaN] [ NaN] [ NaN] [ NaN]
[ NaN] [ NaN] [ NaN] [ NaN] [ NaN] [ NaN]
[ NaN] [ NaN] [ NaN] [ NaN] [ NaN] [ NaN]
[4.8455] [0.8076] [0.0864] [ 0.1917] [ 0.5184] [ 0.4275]
[5.1224] [0.8537] [0.3679] [ 0.7887] [ 2.2073] [ 1.8883]
[5.1932] [0.8656] [0.6473] [ 1.3217] [ 3.8835] [ 3.3626]
[5.2023] [0.8671] [0.8252] [ 1.6275] [ 4.9510] [ 4.2929]
[5.1816] [0.8636] [0.7828] [ 1.6663] [ 4.6970] [ 4.0567]
[5.1818] [0.8636] [0.6551] [ 1.4768] [ 3.9308] [ 3.3937]
[5.1937] [0.8656] [0.6070] [ 1.4121] [ 3.6422] [ 3.1528]
[5.1665] [0.8611] [0.6443] [ 1.5050] [ 3.8656] [ 3.3284]
[5.1786] [0.8631] [0.6824] [ 1.5289] [ 4.0944] [ 3.5341]
[5.0321] [0.8386] [0.6997] [ 1.5754] [ 4.1985] [ 3.5209]
[4.9381] [0.8231] [0.7431] [ 1.6090] [ 4.4583] [ 3.6695]
[4.9326] [0.8221] [0.7708] [ 1.7676] [ 4.6245] [ 3.8018]
[4.7815] [0.7970] [0.8851] [ 2.0084] [ 5.3107] [ 4.0625]
[3.9136] [0.6523] [2.5109] [ 5.3401] [15.0656] [ 9.7846]
[3.8419] [0.6403] [4.3700] [ 8.2200] [26.2199] [16.7885]
[3.8559] [0.6426] [4.3385] [ 7.9125] [26.0312] [16.7235]
[3.8803] [0.6467] [3.9299] [ 7.9730] [23.5793] [15.2499]
[3.8741] [0.6457] [3.8246] [ 8.2150] [22.9478] [14.8167]
[3.8733] [0.6456] [3.9232] [ 8.2825] [23.5394] [15.1959]
[3.8604] [0.6434] [3.9364] [ 8.4879] [23.6182] [15.1961]
[3.8052] [0.6342] [3.9610] [ 8.4783] [23.7659] [15.0720]
[3.8177] [0.6363] [4.0807] [ 8.3607] [24.4842] [15.5765]
[3.7615] [0.6269] [5.4267] [10.9853] [32.5598] [20.4115]
[3.6900] [0.6150] [5.8236] [12.4549] [34.9416] [21.4899]
[3.7249] [0.6208] [6.0688] [12.3084] [36.4125] [22.6080]
[3.7621] [0.6270] [6.4914] [12.5395] [38.9481] [24.4177]
[3.7485] [0.6248] [7.1611] [12.7942] [42.9669] [26.8452]
[3.7492] [0.6249] [7.1063] [12.8555] [42.6379] [26.6462]
[3.7029] [0.6171] [6.6088] [12.9124] [39.6529] [24.4730]
[3.7172] [0.6195] [6.3574] [12.7681] [38.1441] [23.6259]
[3.8148] [0.6358] [6.2090] [12.7283] [37.2539] [23.6851]
[ NaN] [ NaN] [ NaN] [ NaN] [ NaN] [ NaN]}
I want to extrapolate the values in the last row.
I tried
out3=[];
outtx=CELL2MAT(A)
for c = 1:size(outtx,2)
outtxa=inpaint_nans(outtx(:,c)',2);
outtxa=outtxa';
end
out3=[out3 outtxa ];
but I get the following error
?? Subscript indices must either be real positive integers or logicals.
Error in ==> inpaint_nans at 233
fda(n,[n, n-1,n+n])=[-2 1 1];
thanks
PS: is there also a way to find the values in the first 4 rows?
1 个评论
Oleg Komarov
2012-8-11
编辑:Oleg Komarov
2012-8-11
Please, store your A in a double matrix.
A = cell2mat(A);
And keep it as double. Storing a double matrix in that ways wastes memory, it's annoying since you always have to convert with cell2mat and it's harder to work with.
采纳的回答
Oleg Komarov
2012-8-11
编辑:Oleg Komarov
2012-8-11
It appears to be a bug in this contribution.
You have two options:
- report this to the author on the FEX and wait for HIS answer.
- Use interp1() with the 'extrap' option
% From my previous answer to your post
xi = (1:size(A,1))';
% Index the non NaN
idx = ~isnan(A(:,1));
out = interp1(xi(idx),A(idx,:),xi,'linear','extrap');
5 个评论
Oleg Komarov
2012-8-11
@Sabbas: which A are you using, not the same in the example?
I suppose you're looping because NaNs appear at different locations, if not, then no need to loop.
Here follows the polished code from your first comment:
A = cell2mat(A);
xi = (1:size(A,1))';
for c = 1:size(A,2)
idx = ~isnan(outtx(:,c));
outtx(:,c) = interp1(xi(idx),A(idx,c),xi,'linear','extrap');
end
It doesn't work because some of your series could be all NaN or have just one data point.
When it error check the index of the loop and control that the column has at least 2 data points. However, I would recommend checking this BEFORE applying interpolation. Generally, series which do not have enough observations are discarded in toto.
更多回答(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!