From b473a9ae02a5d62a8f4e95fef3fd9c73486a2e50 Mon Sep 17 00:00:00 2001
From: "jan.middendorf@rwth-aachen.de" <jan.middendorf@rwth-aachen.de>
Date: Mon, 17 Aug 2020 17:17:42 +0200
Subject: [PATCH] Added option to Normal class to ignore zeros in mean and std

---
 keras.py | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/keras.py b/keras.py
index fced3c9..e4b333c 100644
--- a/keras.py
+++ b/keras.py
@@ -164,13 +164,17 @@ class KFeed(object):
         )
 
 
-def Normal(ref, indices=None, name=None, **kwargs):
+def Normal(ref, indices=None, ignore_zeros=False, name=None, **kwargs):
     """
     Normalizing layer according to ref.
     If given, only the variables corresponding to indices will be normalized.
     """
-    mean = ref.mean(**kwargs)
-    std = ref.std(**kwargs)
+    if ignore_zeros:
+        mean = np.nanmean(np.where(ref==0, np.ones_like(ref)*np.nan, ref), **kwargs)
+        std = np.nanstd(np.where(ref==0, np.ones_like(ref)*np.nan, ref), **kwargs)
+    else:
+        mean = ref.mean(**kwargs)
+        std = ref.std(**kwargs)
     if indices:
         indices = np.array(indices)
         replace = np.isin(np.arange(len(mean)), indices, invert=True)
-- 
GitLab