[英]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
數組,然后應用例如sort
或argsort
; 只要確保你選擇了正確的軸。 這些 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.