5

問題の説明

sを含むデータセットがありint、いくつかの基準でサブデータセットを選択したいのですが、整数データ型を保持したいと思います。Xarray が整数データを float データ型に強制的に変更しているように思えます。

設定例

コード

import numpy
import xarray

nums = numpy.random.randint(0, 100, 13)
names = numpy.random.choice(["babadook", "samara", "jason"], 13)
data_vars = {"num": xarray.DataArray(nums), "name": xarray.DataArray(names)}
dataset = xarray.Dataset(data_vars)
print(dataset)

出力

<xarray.Dataset>
Dimensions:  (dim_0: 13)
Coordinates:
  * dim_0    (dim_0) int64 0 1 2 3 4 5 6 7 8 9 10 11 12
Data variables:
    num      (dim_0) int64 93 99 49 35 92 14 41 57 28 59 74 1 15
    name     (dim_0) <U8 'babadook' 'samara' 'samara' 'samara' 'jason' ...
In [16]:

問題例

コード

subdataset = dataset.where(dataset.num < 50, drop=True)
print(subdataset)

出力

<xarray.Dataset>
Dimensions:  (dim_0: 7)
Coordinates:
  * dim_0    (dim_0) int64 2 3 5 6 8 11 12
Data variables:
    num      (dim_0) float64 49.0 35.0 14.0 41.0 28.0 1.0 15.0
    name     (dim_0) <U32 'samara' 'samara' 'jason' 'babadook' 'jason' ...
4

1 に答える 1

5

これは、numpy (xarray が内部で使用する) では int にNaNs を表す方法がないためです。そのため、ほとんどのwhere結果では、型を float に強制する必要があります。

マスクされたすべての値が削除された場合drop=True、それは実際には制約ではありません。値は必要ないため、新しい配列にその dtype を保持させることができNaNます。現時点では xarray にはありませんが、追加機能になる可能性があります。

于 2016-09-12T16:38:17.957 に答える