Issue #1147: Derived quantities `max_location` and `min_location` not returning correct index values (yt_analysis/yt)
New issue 1147: Derived quantities `max_location` and `min_location` not returning correct index values https://bitbucket.org/yt_analysis/yt/issues/1147/derived-quantities-max_loca... Cameron Hummels: Something is going awry in the `max_location` and `min_location` derived quantities such that they return an incorrect index for where the extrema occur. Here's an example script. I tried correcting the code, but I got caught up in the chunk processing for derived quantities. ``` #!python import yt import numpy as np ds = yt.load('IsolatedGalaxy/galaxy0030/galaxy0030') ad = ds.all_data() val, index, x, y, z = ad.quantities.max_location('density') print val == ad['density'][int(index)] # false val2 = ad['density'].max() index2 = np.argmax(ad['density']) print val2 == ad['density'][index2] # true print val == val2 # true print index == index2 # false # Thus, something is going awry in the max_location (and the min_location) # derived quantities where it calculates the index values for the extrema ```
I'm not sure that, as it stands, it is possible to get the "index", unless we made the parallel iteration sequential. Perhaps a better solution would be to not return the index value. On Sun, Nov 22, 2015 at 4:06 PM, Cameron Hummels <issues-reply@bitbucket.org> wrote:
New issue 1147: Derived quantities `max_location` and `min_location` not returning correct index values https://bitbucket.org/yt_analysis/yt/issues/1147/derived-quantities-max_loca...
Cameron Hummels:
Something is going awry in the `max_location` and `min_location` derived quantities such that they return an incorrect index for where the extrema occur. Here's an example script. I tried correcting the code, but I got caught up in the chunk processing for derived quantities.
``` #!python
import yt import numpy as np
ds = yt.load('IsolatedGalaxy/galaxy0030/galaxy0030') ad = ds.all_data() val, index, x, y, z = ad.quantities.max_location('density') print val == ad['density'][int(index)] # false
val2 = ad['density'].max() index2 = np.argmax(ad['density']) print val2 == ad['density'][index2] # true
print val == val2 # true print index == index2 # false
# Thus, something is going awry in the max_location (and the min_location) # derived quantities where it calculates the index values for the extrema ```
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
I have an alternate solution to this problem, which dovetails with the numpy-like operations. If we were to make a different DerivedQuantity (which MaxLocation and MinLocation could subclass with a prescription that they return x,y,z) that accepted the names of the fields to obtain at the maximum value of a field, this could probably accomplish what you are looking for. This would be equivalent to the .argmax() operation, so you would be able to do: dd = ds.all_data() dd.argmax("density", ["temperature", "velocity_magnitude"]) and get back the temperature and velocity_magnitude fields at the maximum density. Would that suffice? On Sun, Nov 22, 2015 at 4:11 PM, Matthew Turk <matthewturk@gmail.com> wrote:
I'm not sure that, as it stands, it is possible to get the "index", unless we made the parallel iteration sequential. Perhaps a better solution would be to not return the index value.
On Sun, Nov 22, 2015 at 4:06 PM, Cameron Hummels <issues-reply@bitbucket.org> wrote:
New issue 1147: Derived quantities `max_location` and `min_location` not returning correct index values https://bitbucket.org/yt_analysis/yt/issues/1147/derived-quantities-max_loca...
Cameron Hummels:
Something is going awry in the `max_location` and `min_location` derived quantities such that they return an incorrect index for where the extrema occur. Here's an example script. I tried correcting the code, but I got caught up in the chunk processing for derived quantities.
``` #!python
import yt import numpy as np
ds = yt.load('IsolatedGalaxy/galaxy0030/galaxy0030') ad = ds.all_data() val, index, x, y, z = ad.quantities.max_location('density') print val == ad['density'][int(index)] # false
val2 = ad['density'].max() index2 = np.argmax(ad['density']) print val2 == ad['density'][index2] # true
print val == val2 # true print index == index2 # false
# Thus, something is going awry in the max_location (and the min_location) # derived quantities where it calculates the index values for the extrema ```
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
This looks like it would be a welcome addition to the code if someone wants to put it together, but I agree, that at the minimum, we should remove the bad index value returned to the user. Good idea! On Mon, Nov 23, 2015 at 1:08 PM, Matthew Turk <matthewturk@gmail.com> wrote:
I have an alternate solution to this problem, which dovetails with the numpy-like operations.
If we were to make a different DerivedQuantity (which MaxLocation and MinLocation could subclass with a prescription that they return x,y,z) that accepted the names of the fields to obtain at the maximum value of a field, this could probably accomplish what you are looking for. This would be equivalent to the .argmax() operation, so you would be able to do:
dd = ds.all_data() dd.argmax("density", ["temperature", "velocity_magnitude"])
and get back the temperature and velocity_magnitude fields at the maximum density.
Would that suffice?
On Sun, Nov 22, 2015 at 4:11 PM, Matthew Turk <matthewturk@gmail.com> wrote:
I'm not sure that, as it stands, it is possible to get the "index", unless we made the parallel iteration sequential. Perhaps a better solution would be to not return the index value.
On Sun, Nov 22, 2015 at 4:06 PM, Cameron Hummels <issues-reply@bitbucket.org> wrote:
New issue 1147: Derived quantities `max_location` and `min_location` not returning correct index values
https://bitbucket.org/yt_analysis/yt/issues/1147/derived-quantities-max_loca...
Cameron Hummels:
Something is going awry in the `max_location` and `min_location`
derived quantities such that they return an incorrect index for where the extrema occur. Here's an example script. I tried correcting the code, but I got caught up in the chunk processing for derived quantities.
``` #!python
import yt import numpy as np
ds = yt.load('IsolatedGalaxy/galaxy0030/galaxy0030') ad = ds.all_data() val, index, x, y, z = ad.quantities.max_location('density') print val == ad['density'][int(index)] # false
val2 = ad['density'].max() index2 = np.argmax(ad['density']) print val2 == ad['density'][index2] # true
print val == val2 # true print index == index2 # false
# Thus, something is going awry in the max_location (and the
min_location)
# derived quantities where it calculates the index values for the extrema ```
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
-- Cameron Hummels NSF Postdoctoral Fellow Department of Astronomy California Institute of Technology http://chummels.org
participants (3)
-
Cameron Hummels
-
Cameron Hummels
-
Matthew Turk