2017-08-29 93 views
2

我想插入一個M*N矩陣。例如,矩陣T表示溫度,基質B代表的位置:2D矩陣的一維插值

T = [1 3 5; ... 
    2 4 6; ... 
    1 2 3]; 
B = [0.1 0.2 0.3; ... 
    0.1 0.2 0.3; ... 
    0.1 0.2 0.3]; 

我想獲得在位置0.150.25溫度信息。因此,矩陣B將是這樣的:

New_B = [0.1 0.15 0.2 0.25 0.3; ... 
     0.1 0.15 0.2 0.25 0.3; ... 
     0.1 0.15 0.2 0.25 0.3]; 

和矩陣T預期的結果將是:

T = [1 2 3 4 5; ... 
    2 3 4 5 6; ... 
    1 1.5 2 2.5 3]; 

我想:

New_T = interp2(T, B, New_B); 

但它不工作。我如何做這個插值?

回答

2

您可以將interp1一個矩陣,在這種情況下,它會沿着每列運行。既然你想沿每一行插入,你將不得不輸入transpose你的輸入和輸出。你也只需要每BNew_B一行:

New_T = interp1(B(1, :).', T.', New_B(1, :).').'; 

New_T = 

    1.0000 2.0000 3.0000 4.0000 5.0000 
    2.0000 3.0000 4.0000 5.0000 6.0000 
    1.0000 1.5000 2.0000 2.5000 3.0000 

如果你好奇,你就必須指定其他行網格點使用interp2

New_T = interp2(B(1, :), (1:size(B, 1)).', T, New_B(1, :), (1:size(New_B, 1)).'); 
2

您將不得不使用for循環,因爲interp1僅適用於單行。

T=[ 1 3 5; 2 4 6; 1 2 3]; 
B=[0.1 0.2 0.3; 0.1 0.2 0.3; 0.1 0.2 0.3]; 


B_new = [0.1 0.15 0.2 0.25 0.3; 0.1 0.15 0.2 0.25 0.3; 0.1 0.15 0.2 0.25 0.3]; 

T_new = cell(2,1); 

for k=1:size(B,1) 

    T_new{k} = interp1(B(1,:),T(k,:),B_new(k,:)); 

end 

T_new = cell2mat(T_new) 

輸出:

T_new = 

    1.0000 2.0000 3.0000 4.0000 5.0000 
    2.0000 3.0000 4.0000 5.0000 6.0000 
    1.0000 1.5000 2.0000 2.5000 3.0000 
+0

謝謝。我可以使用interp2嗎?因爲我有大量數據,Loop會殺死程序。 – Math

+1

interp2也假定第二維中的值之間也有關係。你可以通過預先聲明一個矩陣而不是一個單元來快速地創建循環。 'T_new = nan(size(B_new))'和'T_new(k,:) = interp1(...'interp1非常快,我無法想象它會如何殺死程序。 – Gelliant