矩阵内的插值。Matlab

矩阵内的插值。Matlab,matlab,matrix,Matlab,Matrix,我有一个矩阵,看起来像: 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 1 0 4 0 0 0 0 0 3 0 0 6 0 0 4 0 0 3 0 0 2 0 0 5 0 0 它是11x5矩阵。 我想在每列的值之间进行垂直插值 有什么帮助吗 谢谢 M

我有一个矩阵,看起来像:

    0  0  0  0  0
    1  0  0  0  0
    0  2  0  0  0
    0  0  2  0  0
    0  0  0  1  0
    1  0  0  0  1
    0  4  0  0  0
    0  0  3  0  0
    6  0  0  4  0
    0  3  0  0  2
    0  0  5  0  0
它是11x5矩阵。 我想在每列的值之间进行垂直插值

有什么帮助吗

谢谢

M =[0  0  0  0  0
    1  0  0  0  0
    0  2  0  0  0
    0  0  2  0  0
    0  0  0  1  0
    1  0  0  0  1
    0  4  0  0  0
    0  0  3  0  0
    6  0  0  4  0
    0  3  0  0  2
    0  0  5  0  0];

xi = 1:size(M,1)
for colIdx = 1:size(M,2)
    col = M(:,colIdx);
    x = xi(~~col);  %// Note that ~~col is a logical vector of elements that are not equal to zero. i.e. it's the same as col ~= 0
    y = col(~~col);
    M(:,colIdx) = interp1(x,y,xi);
end
然后,如果希望外部点为
0
则在循环后添加此行:

M(isnan(M)) = 0;

我知道什么是矩阵和插值;我不知道你所说的“在每列的值之间垂直插值”是什么意思。第1列和第2列(0,0.5,1,0,0,0.5,2.0等)之间的值是否正确?感觉就像两个简单的选择器和平均值就可以了。是的,我读过,但我不知道如何正确地做。每次都会给出错误的值。@user3049408您能提供一个手工制作的示例输出吗?我需要对每列进行插值,以便填补值>0之间的空白。例如:在第一列:有3个值>0:1、1、6,我想在第1列的这三个值之间进行插值。在其他专栏中,我也试过了。它给出了这个错误:x=xi(idx);索引超出了矩阵维度。@user3049408请立即尝试。我留下了一个
~
,因为我要找的不是零的数字,你太棒了。我不知道你怎么做,但效果很好。感谢如此多的逐列(即循环),您需要提取非零元素(
y=col(~~col)
)并找到适当的x值,而它只是行号
xi
是一个行号列表,因此列(
col
)中现在为零的元素的行就是
x=xi(~~col)
。然后告诉它对每一行进行插值,即
xi