11

薄暗い配列と'time', 'lat', 'lon'だけの配列があります'lat', 'lon'。2D (lat-lon) マスクで時間依存データをマスクするために、これを行う必要があることがよくあります。

x.data[:, mask.data] = np.nan

もちろん、計算は期待どおりにブロードキャストされます。yが 2 次元緯度データの場合、その値は x のすべての時間座標にブロードキャストされます。

z = x + y

しかし、インデックス作成は期待どおりにブロードキャストされません。これを実行できるようにしたいのですが、ValueError: Buffer has wrong number of dimension が発生します:

x[mask] = np.nan

最後に、期待どおりに時間座標全体にマスクの値をブロードキャストするようですxr.where が、この方法で値を設定することはできません。

x_masked = x.where(mask)

それで、次元が欠落している(そしてブロードキャストする必要がある)ブール値マスクを使用して値を設定しやすくするために、ここで欠けているものはありますか?一番上で提供したオプションは本当にこれを行う方法ですか (その場合、標準のnumpy配列を使用するだけでよいかもしれません...)

4

1 に答える 1

9

編集:この質問はまだ支持を得ていますが、今でははるかに簡単です -この回答を参照してください


ここでやや関連する質問: xarray でデータをフィルター処理する簡潔な方法

現在、最善のアプローチは と の組み合わせ.whereです.fillna

valid = date_by_items.notnull()
positive = date_by_items > 0
positive = positive * 2
result = positive.fillna(0.).where(valid)
result

ただし、これをより簡潔にする変更が xarray に追加されています。興味がある場合は、GitHub リポジトリをチェックしてください。

于 2016-09-23T16:20:54.100 に答える