summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2021-06-25 11:05:24 +0200
committerDaniel Friesel <daniel.friesel@uos.de>2021-06-25 11:05:24 +0200
commitf4bb2af96fe0923258b1a082ecba06da7b88df67 (patch)
tree6fb6f08ac23adb14fd2cbb61b5d149c01e4aefe0 /lib
parent21e8884c62187587a8cf8ae277dbdb5297de4645 (diff)
add observations_to_by_name
Diffstat (limited to 'lib')
-rw-r--r--lib/utils.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/utils.py b/lib/utils.py
index 17cdb51..22ac8da 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -189,6 +189,37 @@ def partition_by_param(data, param_values, ignore_parameters=list()):
return ret
+def param_dict_to_list(param_dict, parameter_names, default=None):
+ ret = list()
+ for parameter_name in parameter_names:
+ ret.append(param_dict.get(parameter_name, None))
+ return ret
+
+
+def observations_to_by_name(observations: list, attributes: list):
+ parameter_names = set()
+ by_name = dict()
+ for observation in observations:
+ parameter_names.update(observation["param"].keys())
+ name = observation["name"]
+ if name not in by_name:
+ by_name[name] = {"attributes": attributes, "param": list()}
+ for attribute in attributes:
+ by_name[name][attribute] = list()
+ parameter_names = sorted(parameter_names)
+ for observation in observations:
+ name = observation["name"]
+ by_name[name]["param"].append(
+ param_dict_to_list(observation["param"], parameter_names)
+ )
+ for attribute in attributes:
+ by_name[name][attribute].append(observation[attribute])
+ for name in by_name:
+ for attribute in attributes:
+ by_name[name][attribute] = np.array(by_name[name][attribute])
+ return by_name, parameter_names
+
+
def by_name_to_by_param(by_name: dict):
"""
Convert aggregation by name to aggregation by name and parameter values.