像這樣的事情會爲你的玩具情況下工作:
l = length(P{1}(:)); m = size(P{1}, 1); n = size(P{1}, 2);
myfun = @(x) interp1([1 3], [P{1}(x) P{3}(x)], 2)
P{2} = reshape(arrayfun(myfun, 1:l), m, n);
更多通用代碼(驗證!),將在一般的工作。你可以指定一個interp1呼叫使用哪種類型的插值:
[m, n] = size(P{1}); l = m*n;
avbl = find(not(cellfun('isempty', P)));
missing = find(cellfun('isempty', P));
extractor = @(k) cellfun(@(x, k) x(k), {P{avbl}}, cellmat(1, length(avbl), 1, 1, k))
myfun = @(x) interp1(avbl, extractor(x), missing)
intermediate = reshape(arrayfun(myfun, 1:l, 'UniformOutput', false), m, n);
ext2 = @(k) cellfun(@(p) p(k), intermediate);
P(missing) = arrayfun(ext2, 1:length(missing), 'UniformOutput', false);
讓我知道如果你要我解釋一些零件。這基本上只是調用cellfun幾次,然後重塑輸出。
如果第一個和第三個單元格中(1,1)的元素分別是1和2,那麼是否希望對它們進行平均使得第二個單元格中的(1,1)將會是1.5?或者你的意思是'插入'更有趣嗎? – tmpearce
@tmpearce平均值肯定會。有時候矩陣中的數據不一定是線性縮放的,我可能有其他矩陣可以從中拉出。我可以編輯問題以顯示更一般的情況。 –
還有一個問題:矩陣中每個位置的1-d插值是否是所需的結果?即看所有(1,1)都將是確定(1,1)索引中缺失值所需的全部內容? – tmpearce