簡體   English   中英

Python,Xarray:按數組中每個單元格的降序排列變量

[英]Python, Xarray: Rank variable by descending order for each cell in an array

我有一個數據集,其維度為年份、緯度、經度和變量 x,我正在對其進行 function 以確定其他一些統計數據。

對於我選擇的一個緯度/經度單元格,我能夠將 1,000 年中的每一年的單個 x 值從最大到最小排列並刪除 nans,留下一個排序的一維數組。 從那里,我做了一個 function 來確定給定的排名值,然后從一維數組中拉出該給定排名的 x 值。

例子:

x 值數組 = [6, 10, 5, nan, 4, nan, 3]

排序數組 = [10, 6, 5, 4, 3]

在計算的排名處提取 x 值,例如排名 = 2

該緯度/經度的最終排名值 = 6

這個過程非常適合單點,但我正在嘗試對整個數組中的每個網格單元緯度/經度執行這個過程,我覺得這應該很簡單,但是我無法將這些函數應用於完整的數組

謝謝!

如果您包含單個單元格的代碼,這可能會有所幫助。 還有,你哪里有問題?

如果您的數組適合 memory,您始終可以使用 .values 獲取底層.values數組,然后應用例如sortargsort 只要確保你選擇了正確的軸。 這些 numpy 函數通常總是在整個陣列上工作。

https://numpy.org/doc/stable/reference/generated/numpy.sort.html https://numpy.org/doc/stable/reference/generated/numpy.argsort.html

請注意,對於 memory 訪問效率,理想情況下您對最后一個軸進行排序。 這可能需要轉置您的數組,以便year是最后一個維度。

有關更多背景信息,請參閱此答案: 連續和非連續 arrays 有什么區別?

apply_ufunc ,就像 Ray Bell 在評論中建議的那樣,可能是最好的解決方案。

如果問題是您的數組太大而無法放入 memory,請嘗試分塊讀取數據集(超過 x 和 y,而不是年份),並且apply_ufunc方法對於 stream 數據和 dask 變得必要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM