2015-06-22 80 views
-2

我有一個矩陣的樣子:矩陣內的插值。 Matlab的

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矩陣。 我想爲每列垂直插值。

任何幫助?

謝謝。

+0

'interp2'可能? –

+0

我知道matricies和插值是什麼;我不確定你的意思是「爲每列縱向插值」。列1和列2(0,0.5,1,0,0,0.5,2.0,...)之間的值是否等於?感覺像兩個簡單的選擇器和平均會做的伎倆。 – duffymo

+0

是的,我讀過它,但我不知道如何正確地做到這一點。它每次都會給出錯誤的值。 – user3049408

回答

1
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; 
+0

非常感謝。 – user3049408

+0

我試過了。它給出了這個錯誤:x = xi(idx); 索引超出矩陣尺寸。 – user3049408

+0

@ user3049408現在就試試。因爲我正在尋找不是零的數字,所以我放棄了一個'〜'。 – Dan