2009-12-19 95 views
1

我想在矩陣上做元素明智的加法,同時跳過NaN值。 MATLAB和Octave有nansum,但它在矩陣中進行列式加法。矩陣加跳過NaN值

令:

a = NaN * zeros(3) 
b = ones(3) 


我想:

c = nan+(a, b) 

c = b 


和:

d = nan+(a,a) 

d = a 
+1

取而代之的是= NaN的*零(3)你可以寫一個= NaN的(3) – Mikhail 2009-12-20 09:00:00

回答

6

您仍然可以使用nansum,如果您的鏈狀正d陣列沿第n + 1維。

對於2D

% commands de-nested for readability. You can do this with a single line, of course 
tmp = cat(3,a,b); 
c = nansum(tmp,3); 

一般情況下

function out = nansumByElement(A,B) 
%NANSUMBYELEMENT performs an element-wise nansum on the n-D arrays A and B 
% A and B have to have the same size 

% test input 
if nargin < 2 || isempty(A) || isempty(B) || ndims(A)~=ndims(B) || ~all(size(A)==size(B)) 
error('please pass two non-empty arrays of the same size to nansumByElement') 
end 

% calculate output 

nd = ndims(A); % get number of dimensions 
% catenate and sum along n+1st dimension 
out = nansum(cat(nd+1,A,B),nd+1); 
+0

+1,我即將發佈相同的解決方案.. – Amro 2009-12-19 17:25:45

+0

謝謝,這幾乎是它。
我仍然希望NaN + NaN = NaN而不是0.
但是,即使nansum也沒有這樣做。 – Naveen 2009-12-19 17:46:14

+0

我剛剛加了 out(和(isnan(A),isnan(B)))= NaN 現在它工作 – Naveen 2009-12-19 17:54:40

1
a_fixed = a; 
a_fixed(isnan(a)) = 0; 
b_fixed = b; 
b_fixed(isnan(b)) = 0; 
c = a_fixed.+b_fixed; 
+0

謝謝,這是我怎麼會都它最終走了,但它也很好地知道如何使用上面的cat和nansum方法。 – Naveen 2009-12-19 18:07:39