[yt-svn] commit/yt: 4 new changesets
Bitbucket
commits-noreply at bitbucket.org
Fri Jan 4 08:16:09 PST 2013
4 new commits in yt:
https://bitbucket.org/yt_analysis/yt/commits/5b3692d12668/
changeset: 5b3692d12668
branch: yt
user: brittonsmith
date: 2013-01-04 00:01:56
summary: Adding weighted variance derived quantity.
affected #: 1 file
diff -r bfb9dd705e5439e2944b4c5ae95080e5e577f1af -r 5b3692d126688cec375d99e1554111dad231eeb6 yt/data_objects/derived_quantities.py
--- a/yt/data_objects/derived_quantities.py
+++ b/yt/data_objects/derived_quantities.py
@@ -204,6 +204,27 @@
add_quantity("WeightedAverageQuantity", function=_WeightedAverageQuantity,
combine_function=_combWeightedAverageQuantity, n_ret = 2)
+def _WeightedVariance(data, field, weight):
+ """
+ This function returns the variance of a field.
+
+ :param field: The target field
+ :param weight: The field to weight by
+
+ Returns the weighted variance and the weighted mean.
+ """
+ my_weight = data[weight].sum()
+ my_mean = (data[field] * data[weight]).sum() / my_weight
+ my_var2 = (data[weight] * (data[field] - my_mean)**2).sum() / my_weight
+ return my_weight, my_mean, my_var2
+def _combWeightedVariance(data, my_weight, my_mean, my_var2):
+ all_weight = my_weight.sum()
+ all_mean = (my_weight * my_mean).sum() / all_weight
+ return [np.sqrt((my_weight * (my_var2 + (my_mean - all_mean)**2)).sum() /
+ all_weight), all_mean]
+add_quantity("WeightedVariance", function=_WeightedVariance,
+ combine_function=_combWeightedVariance, n_ret=3)
+
def _BulkVelocity(data):
"""
This function returns the mass-weighted average velocity in the object.
https://bitbucket.org/yt_analysis/yt/commits/bf3bf0f854fd/
changeset: bf3bf0f854fd
branch: yt
user: brittonsmith
date: 2013-01-04 00:02:20
summary: Adding tests for weighted average and variance derived quantities.
affected #: 1 file
diff -r 5b3692d126688cec375d99e1554111dad231eeb6 -r bf3bf0f854fdb66e52107dc3de68d070581205c6 yt/data_objects/tests/test_derived_quantities.py
--- a/yt/data_objects/tests/test_derived_quantities.py
+++ b/yt/data_objects/tests/test_derived_quantities.py
@@ -22,3 +22,31 @@
(mi, ma), = dd.quantities["Extrema"]("RadialVelocity")
yield assert_equal, mi, np.nanmin(dd["RadialVelocity"])
yield assert_equal, ma, np.nanmax(dd["RadialVelocity"])
+
+def test_average():
+ for nprocs in [1, 2, 4, 8]:
+ pf = fake_random_pf(16, nprocs = nprocs, fields = ("Density",))
+ ad = pf.h.all_data()
+
+ my_mean = ad.quantities["WeightedAverageQuantity"]("Density", "Ones")
+ yield assert_rel_equal, my_mean, ad["Density"].mean(), 13
+
+ my_mean = ad.quantities["WeightedAverageQuantity"]("Density", "CellMass")
+ a_mean = (ad["Density"] * ad["CellMass"]).sum() / ad["CellMass"].sum()
+ yield assert_rel_equal, my_mean, a_mean, 14
+
+def test_variance():
+ for nprocs in [1, 2, 4, 8]:
+ pf = fake_random_pf(16, nprocs = nprocs, fields = ("Density", ))
+ ad = pf.h.all_data()
+
+ my_std, my_mean = ad.quantities["WeightedVariance"]("Density", "Ones")
+ yield assert_rel_equal, my_mean, ad["Density"].mean(), 13
+ yield assert_rel_equal, my_std, ad["Density"].std(), 13
+
+ my_std, my_mean = ad.quantities["WeightedVariance"]("Density", "CellMass")
+ a_mean = (ad["Density"] * ad["CellMass"]).sum() / ad["CellMass"].sum()
+ yield assert_rel_equal, my_mean, a_mean, 13
+ a_std = np.sqrt((ad["CellMass"] * (ad["Density"] - a_mean)**2).sum() /
+ ad["CellMass"].sum())
+ yield assert_rel_equal, my_std, a_std, 13
https://bitbucket.org/yt_analysis/yt/commits/ed8eaf338837/
changeset: ed8eaf338837
branch: yt
user: brittonsmith
date: 2013-01-04 17:07:36
summary: Empty data objects were causing nans in the weighted variance.
affected #: 1 file
diff -r bf3bf0f854fdb66e52107dc3de68d070581205c6 -r ed8eaf338837f19aac78c86f64ce07e646b23c2a yt/data_objects/derived_quantities.py
--- a/yt/data_objects/derived_quantities.py
+++ b/yt/data_objects/derived_quantities.py
@@ -214,6 +214,8 @@
Returns the weighted variance and the weighted mean.
"""
my_weight = data[weight].sum()
+ if my_weight == 0:
+ return 0.0, 0.0, 0.0
my_mean = (data[field] * data[weight]).sum() / my_weight
my_var2 = (data[weight] * (data[field] - my_mean)**2).sum() / my_weight
return my_weight, my_mean, my_var2
https://bitbucket.org/yt_analysis/yt/commits/108341fe239f/
changeset: 108341fe239f
branch: yt
user: MatthewTurk
date: 2013-01-04 17:16:03
summary: Merged in brittonsmith/yt (pull request #389: Added weighted variance derived quantity and tests for average and variance.)
affected #: 2 files
diff -r 2385290163db579ebf4baa721c7c3e4f07c2b052 -r 108341fe239ff34e362134463f703763f4319315 yt/data_objects/derived_quantities.py
--- a/yt/data_objects/derived_quantities.py
+++ b/yt/data_objects/derived_quantities.py
@@ -204,6 +204,29 @@
add_quantity("WeightedAverageQuantity", function=_WeightedAverageQuantity,
combine_function=_combWeightedAverageQuantity, n_ret = 2)
+def _WeightedVariance(data, field, weight):
+ """
+ This function returns the variance of a field.
+
+ :param field: The target field
+ :param weight: The field to weight by
+
+ Returns the weighted variance and the weighted mean.
+ """
+ my_weight = data[weight].sum()
+ if my_weight == 0:
+ return 0.0, 0.0, 0.0
+ my_mean = (data[field] * data[weight]).sum() / my_weight
+ my_var2 = (data[weight] * (data[field] - my_mean)**2).sum() / my_weight
+ return my_weight, my_mean, my_var2
+def _combWeightedVariance(data, my_weight, my_mean, my_var2):
+ all_weight = my_weight.sum()
+ all_mean = (my_weight * my_mean).sum() / all_weight
+ return [np.sqrt((my_weight * (my_var2 + (my_mean - all_mean)**2)).sum() /
+ all_weight), all_mean]
+add_quantity("WeightedVariance", function=_WeightedVariance,
+ combine_function=_combWeightedVariance, n_ret=3)
+
def _BulkVelocity(data):
"""
This function returns the mass-weighted average velocity in the object.
diff -r 2385290163db579ebf4baa721c7c3e4f07c2b052 -r 108341fe239ff34e362134463f703763f4319315 yt/data_objects/tests/test_derived_quantities.py
--- a/yt/data_objects/tests/test_derived_quantities.py
+++ b/yt/data_objects/tests/test_derived_quantities.py
@@ -22,3 +22,31 @@
(mi, ma), = dd.quantities["Extrema"]("RadialVelocity")
yield assert_equal, mi, np.nanmin(dd["RadialVelocity"])
yield assert_equal, ma, np.nanmax(dd["RadialVelocity"])
+
+def test_average():
+ for nprocs in [1, 2, 4, 8]:
+ pf = fake_random_pf(16, nprocs = nprocs, fields = ("Density",))
+ ad = pf.h.all_data()
+
+ my_mean = ad.quantities["WeightedAverageQuantity"]("Density", "Ones")
+ yield assert_rel_equal, my_mean, ad["Density"].mean(), 13
+
+ my_mean = ad.quantities["WeightedAverageQuantity"]("Density", "CellMass")
+ a_mean = (ad["Density"] * ad["CellMass"]).sum() / ad["CellMass"].sum()
+ yield assert_rel_equal, my_mean, a_mean, 14
+
+def test_variance():
+ for nprocs in [1, 2, 4, 8]:
+ pf = fake_random_pf(16, nprocs = nprocs, fields = ("Density", ))
+ ad = pf.h.all_data()
+
+ my_std, my_mean = ad.quantities["WeightedVariance"]("Density", "Ones")
+ yield assert_rel_equal, my_mean, ad["Density"].mean(), 13
+ yield assert_rel_equal, my_std, ad["Density"].std(), 13
+
+ my_std, my_mean = ad.quantities["WeightedVariance"]("Density", "CellMass")
+ a_mean = (ad["Density"] * ad["CellMass"]).sum() / ad["CellMass"].sum()
+ yield assert_rel_equal, my_mean, a_mean, 13
+ a_std = np.sqrt((ad["CellMass"] * (ad["Density"] - a_mean)**2).sum() /
+ ad["CellMass"].sum())
+ yield assert_rel_equal, my_std, a_std, 13
Repository URL: https://bitbucket.org/yt_analysis/yt/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the yt-svn
mailing list