矩阵内的插值。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