このようなものはあなたのおもちゃのケースで機能します:
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);
一般的に機能するより一般的なコード(検証済み!!)。1回の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を数回呼び出してから、出力を再形成するだけです。