問題タブ [python-xarray]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-xarray - 複数の引数を取る groupby.apply メソッド
xarray
ドキュメントでは、メソッドはgroupby.apply
いくつかの機能を異なるグループに適用できます。ドキュメントのように、
しかし、標準化関数に別の引数を入れるにはどうすればよいでしょうか? すなわち
正しくないことは明らかです。現在、apply メソッドを呼び出す方法はありません。
python - python xarrayのインデックス作成/スライスが非常に遅い
現在、海洋モデルの出力を処理しています。各タイム ステップには、42*1800*3600 のグリッド ポイントがあります。
私のプログラムのボトルネックはスライスであり、メソッドで xarray_built を呼び出して値を抽出することがわかりました。さらに興味深いのは、同じ構文でも場合によっては大幅に異なる時間が必要になることです。
たとえば、VVEL と UVEL の読み取りには約 4 秒かかりましたが、TEMP の読み取りには約 6 ミリ秒しか必要ありませんでした。スライスなしでは、VVEL と UVEL に約 1 秒、TEMP に 120 ナノ秒かかりました。
完全な配列の一部だけを入力すると、必要なメモリが少なくなるため、時間が少なくて済むと常に思っていました。XARRAY は配列全体をロードし、余分なスライスにはさらに時間がかかることが判明しました。しかし、誰かが同じ netcdf ファイルから異なる変数を読み取るのに時間がかかる理由を説明してもらえますか?
このプログラムは、段階的なセクションを抽出し、断面の熱輸送を計算するように設計されているため、UVEL または VVEL のいずれかをセクションに沿って TEMP で掛ける必要があります。となると、TEMPの読み込みが速いのがいいと思われるかもしれませんね。
残念ながら、そうではありません。指定されたセクションに沿って約 250 のグリッド ポイントをループすると...
特にこの行:
~3.65 秒かかりますが、今では ~250 回繰り返さなければなりません。を削除する.values
と、この時間は約 4 ミリ秒に短縮されます。しかし、 to の時間を計る必要があるtt
ためvt
、値を抽出する必要があります。奇妙なのは、同様の式がvv=np.squeeze(vvel[:,yidx,xidx].values)
必要とする時間がはるかに短く、約 1.3 ミリ秒しかかからないことです。
私の質問を要約すると:
- 同じ netcdf ファイルから異なる変数をロードすると、異なる時間がかかるのはなぜですか?
- 多次元配列で単一の列を選択するより効率的な方法はありますか? (xarray 構造は必要ありません。numpy.ndarray も必要です)
- まったく同じ構文に対して、Xarray 構造から値を抽出するのに必要な時間が異なるのはなぜですか?
ありがとうございました!
python - xarray.Dataset.where() メソッドは、DataArrays の dtype を float に強制的に変更します
問題の説明
sを含むデータセットがありint
、いくつかの基準でサブデータセットを選択したいのですが、整数データ型を保持したいと思います。Xarray が整数データを float データ型に強制的に変更しているように思えます。
設定例
コード
出力
問題例
コード
出力
python - Python xarray netcdf4 で出力変数を作成し、属性をコピーする
次のように、netcdf4 で変数を作成し、属性をコピーできます。
xarray の対応バージョンは?
python - xarray でのブール値のインデックス付け
薄暗い配列と'time', 'lat', 'lon'
だけの配列があります'lat', 'lon'
。2D (lat-lon) マスクで時間依存データをマスクするために、これを行う必要があることがよくあります。
もちろん、計算は期待どおりにブロードキャストされます。y
が 2 次元緯度データの場合、その値は x のすべての時間座標にブロードキャストされます。
しかし、インデックス作成は期待どおりにブロードキャストされません。これを実行できるようにしたいのですが、ValueError: Buffer has wrong number of dimension が発生します:
最後に、期待どおりに時間座標全体にマスクの値をブロードキャストするようですxr.where
が、この方法で値を設定することはできません。
それで、次元が欠落している(そしてブロードキャストする必要がある)ブール値マスクを使用して値を設定しやすくするために、ここで欠けているものはありますか?一番上で提供したオプションは本当にこれを行う方法ですか (その場合、標準のnumpy配列を使用するだけでよいかもしれません...)