2

私はアイリスライブラリを初めて使用し、$HI = temp +rh + temp*rh + temp^2 *rh + のような温度と相対湿度の多変量非線形関数である熱指数を計算する必要があります。 rh^2*temp $ . ここで、temp の単位は華氏、rh の単位は 1 です。

ただし、アイリス キューブは異なるユニットを追加しません。

In [147]: HI = temp + rh + temp*rh + temp**2*rh + rh**2*temp
---------------------------------------------------------------------------
NotYetImplementedError                    Traceback (most recent call last)
<ipython-input-147-675ea72a5d06> in <module>()
----> 1 HI = temp + rh + temp*rh + temp**2*rh + rh**2*temp

/Users/me/anaconda/lib/python2.7/site-packages/iris/cube.pyc in __add__(self, other)
  2596 
   2597     def __add__(self, other):
-> 2598         return iris.analysis.maths.add(self, other, ignore=True)
   2599     __radd__ = __add__
   2600 

/Users/me/anaconda/lib/python2.7/site-packages/iris/analysis/maths.pyc in add(cube, other, dim, ignore, in_place)
    166     op = operator.iadd if in_place else operator.add
167     return _add_subtract_common(op, 'addition', 'added', cube, other, dim=dim,
--> 168                                 ignore=ignore, in_place=in_place)
169 
170 

/Users/me/anaconda/lib/python2.7/site-packages/iris/analysis/maths.pyc     in _add_subtract_common(operation_function, operation_noun,     operation_past_tense, cube, other, dim, ignore, in_place)
    216     """
    217     _assert_is_cube(cube)
--> 218     _assert_matching_units(cube, other, operation_noun)
219 
220     if isinstance(other, iris.cube.Cube):

/Users/me/anaconda/lib/python2.7/site-packages/iris/analysis/maths.pyc in _assert_matching_units(cube, other, operation_noun)
132         raise iris.exceptions.NotYetImplementedError(
133             'Differing units (%s & %s) %s not implemented' %
--> 134             (cube.units, other.units, operation_noun))
135 
136 

NotYetImplementedError: Differing units (Fahrenheit & 1) addition not implemented

代わりに numpy 配列としてデータを呼び出す場合、これは回避策です。例: heatIndex = -42.379 + temp.data + rh.data + temp.data 2 + rh.data 2 しかし、これは Iris を使用する目的を無効にしているようですそもそも、メタデータを書き直す必要があります。

これは虹彩キューブで行うことができますか? これを可能にする、私が見逃しているユニットのない udunit はありますか?

注: エラーから明らかでない場合は、Python 2.7 (および Iris 1.7) を実行しています。

4

2 に答える 2

0

データ配列の操作を開始したときは正しい方向に進んでいたと思いますが、もう少しきれいにすることができます。これの鍵は、温度キューブをコピーすることから始めて、そこから作業することです

C1 = -42.379
C2 = 2.04901523
# etc

def get_heat_index(temp, rh):
    '''Calculate the heat index as defined by George Winterling'''

    # make sure we are using the right temperature units
    # other checks could be implemented as assertions
    temp.convert_units('Fahrenheit')

    # start by copying the temperature cube
    heat_index = temp

    # fix the name of the cube to be returned
    heat_index.rename('heat_index')

    # C2 - do this first as already have temperature data
    heat_index.data = (C1 + C2*temp.data +
                      C3*rh.data +
    # etc
                      C9*temp.data**2*rh.data**2)

    return heat_index
于 2016-01-12T18:11:32.797 に答える