2015-09-01 55 views
0

我有2個列/向量在單元格數組中給出。兩個矢量的長度始終相同。第一個向量有一些值,隨機一些NaN。第二個向量具有NaN直到特定的點,然後纔是值。現在我想將兩個矢量添加到一個長度相同的矢量中。可能發生的是,計算結果是NaN + NaN,那麼結果也應該是NaN。如果我有一個值+ NaN,結果應該是價值。添加2行忽略NaN部分

這可能怎麼辦?

如果我添加的矢量,有空單元而不是NaN,是否更容易解決?但是我不能添加兩個單元格向量,以及當有空單元格時我不能使用cell2mat。

例如

a = {NaN;2;3;NaN;5}; 
b = {1;2;NaN;NaN;5}; 

應導致

c = a+b = {1;4;3;NaN;10}; 
+0

根據你的解釋,結果應該是{1,4,3,NaN,10}嗎?而'空細胞',你的意思是細胞中含有NaN嗎? – RPM

+0

當然!謝謝你,我編輯它 –

+0

你能舉個例子說明你的{a}在MATLAB中看起來像什麼嗎?是否像{'';'2';'3';' ';'5'}? – GameOfThrows

回答

1

如果我理解正確你的問題:

你應該能夠給您的陣列轉化爲向量。 NaN不會變成空值,但會變成NaN標誌。然後,您可以開始將矢量相加,然後使用一些邏輯索引和內置的IsNaN函數更新最終矢量。

a = cell2mat(a); 
b = cell2mat(b); 

c = a + b; 

c(isnan(a) & ~isnan(b)) = b(isnan(a) & ~isnan(b)); 
c(~isnan(a) & isnan(b)) = a(~isnan(a) & isnan(b)); 
+0

完美!非常感謝你。沒有考慮邏輯索引。從你真正的天才:) –