[yt-users] Problem with Units in a Derived Field

Jared Coughlin Jared.W.Coughlin.29 at nd.edu
Tue Aug 25 14:58:40 PDT 2015


Thanks, I'll try that!
-Jared

On Tue, Aug 25, 2015 at 5:55 PM, Andrew Myers <atmyers2 at gmail.com> wrote:

> Hi Jared,
>
> You probably don't want to loop over the entire array in pure python; that
> could be very slow for large datasets. One thing you can do is use slicing
> to select the elements of the array that meet your criterion:
>
> indices = data['gas','InternalEnergy'] <= 1e4
> data['gas', 'InternalEnergy'][indices] = *something*
>
> that would set all the elements where the InternalEnergy field is less
> than or equal to 1e4 to *something*. Usually you can express most
> operations you'd want to do this way without explicitly looping over the
> elements.
>
> -Andrew
>
> On Tue, Aug 25, 2015 at 2:44 PM, Jared Coughlin <
> Jared.W.Coughlin.29 at nd.edu> wrote:
>
>> That seemed to have worked, thanks!
>>
>> I just have another quick question, if you wouldn't mind? In my function
>> to generate my new field, there's an if statement that looks at the value
>> of the temperature: if data['gas','InternalEnergy'] <= 1e4:
>> However, I get the error: "The truth value of an array with more than one
>> element is ambiguous. Use a.any() or a.all()." I wasn't sure how to loop
>> over the elements of the array to access a specific element, or if that's
>> even possible? Using a.any() or a.all() don't seem to fit the bill for this
>> particular problem, either. Thanks!
>> -Jared
>>
>> On Tue, Aug 25, 2015 at 3:19 PM, Nathan Goldbaum <nathan12343 at gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Tue, Aug 25, 2015 at 2:17 PM, Jared Coughlin <
>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>
>>>> Great, thanks! I tried that, and it gave me the error: "YTQuantity
>>>> instances must be scalars." I'm not sure what to do about that, since all
>>>> of these quantities depend on either temperature or density, both of which
>>>> are arrays. I tried looking at the doc page for YTQuantity, but I didn't
>>>> see anything that looked like it could solve this problem, though it's
>>>> possible I missed it.
>>>>
>>>
>>> You need to use YTArray instead. YTQuantity is a subclass of YTArray
>>> that only holds scalars. YTArray can hold arrays of data with units.
>>>
>>>
>>>> -Jared
>>>>
>>>> On Mon, Aug 24, 2015 at 8:13 PM, Nathan Goldbaum <nathan12343 at gmail.com
>>>> > wrote:
>>>>
>>>>>
>>>>>
>>>>> On Monday, August 24, 2015, Cameron Hummels <chummels at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Jared,
>>>>>>
>>>>>> The problem is one of units.  In order to make common arithmetic work
>>>>>> like addition, yt requires both arguments going into the addition operator
>>>>>> to have the same units.
>>>>>>
>>>>>> In your line,
>>>>>>
>>>>>> fHI = (recomb * ne) / (gamma_HI + (gamma_c *ne))
>>>>>>
>>>>>> you're adding two things (gamma_HI) and (gamma_c*ne) that have
>>>>>> different units--in this case, something with (code_mass/code_length**3)
>>>>>> units and something with no units defined as (1).
>>>>>>
>>>>>
>>>>> Just a quick clarification: they need not have the same units, just
>>>>> the same dimensions.  You can add two quantities with units of grams and
>>>>> solar masses (for example) but not grams and liters.
>>>>>
>>>>>
>>>>>>
>>>>>> In order to fix this, you can re-assign the appropriate units to
>>>>>> different arrays or quantities with the YTArray and YTQuantity classes.  In
>>>>>> this case, make sure that the two arguments going into the addition have
>>>>>> the same units.  If you want to recast "ne" to have number density units,
>>>>>> you can do this:  from yt.units.yt_array import YTQuantity; ne =
>>>>>> YTQuantity(ne, 'cm**-3').  For more info on units, check out
>>>>>> http://yt-project.org/docs/dev/analyzing/units/index.html
>>>>>>
>>>>>> I hope this helps!
>>>>>>
>>>>>> Cameron
>>>>>>
>>>>>> On Mon, Aug 24, 2015 at 4:12 PM, Jared Coughlin <
>>>>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>>>>
>>>>>>> Hello! I have a gadget snapshot for which the standard internal
>>>>>>> energy block has been replaced by one containing the temperature.  I'm
>>>>>>> trying to calculate a derived field for the neutral hydrogen number
>>>>>>> density,  but I'm getting an error when I try to do ds.add_field():
>>>>>>>
>>>>>>> http://paste.yt-project.org/show/5833/
>>>>>>>
>>>>>>> However, I get an error about being unable to add quantities with
>>>>>>> differing units:
>>>>>>>
>>>>>>> http://paste.yt-project.org/show/5834/
>>>>>>>
>>>>>>> The docs say not to do any unit conversion because that is
>>>>>>> apparently taken care of behind the scenes, so I didn't.  I was just
>>>>>>> wondering if there was a way around this? Thanks!
>>>>>>> -Jared
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> yt-users mailing list
>>>>>>> yt-users at lists.spacepope.org
>>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Cameron Hummels
>>>>>> NSF Postdoctoral Fellow
>>>>>> Department of Astronomy
>>>>>> California Institute of Technology
>>>>>> http://chummels.org
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> yt-users mailing list
>>>>> yt-users at lists.spacepope.org
>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> yt-users mailing list
>>>> yt-users at lists.spacepope.org
>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>
>>>>
>>>
>>> _______________________________________________
>>> yt-users mailing list
>>> yt-users at lists.spacepope.org
>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>
>>>
>>
>> _______________________________________________
>> yt-users mailing list
>> yt-users at lists.spacepope.org
>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>
>>
>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20150825/765c4e3e/attachment.htm>


More information about the yt-users mailing list