2
我有一個二維數組x上的陣列的行,用具有不同數量的NaN值的每一行:意味着直到25百分含楠
array([[ nan, -0.355, -0.036, ..., nan, nan],
[ nan, -0.341, -0.047, ..., nan, 0.654],
[ .016, -1.147, -0.667, ..., nan, nan],
...,
[ nan, 0.294, -0.235, ..., 0.65, nan]])
鑑於這種陣列中,對於每一行,我想計算前25個百分點內所有值的平均值。我做了以下內容:
limit = np.nanpercentile(x, 25, axis=1) # output 1D array
ans = np.nanmean(x * (x < limit[:,None]), axis=1)
但是,這是給錯誤的結果 - 特別是計數(np.nansum/np.nanmean)保持不變,不管我選擇什麼樣的百分因爲比較產生零它不是真實的,並且被計數爲平均值的有效值。我不能簡單地使用x[x>limit[:,None]]
,因爲這給了一維數組,我需要一個2D結果。
f = x.copy()
f[f > limit[:,None]] = np.nan
ans = np.nanmean(f, axis=1)
是否有這更好的辦法:
我按照解決它?
你的意思是'極限',你寫'低'的地方?如果是這樣,那麼我認爲這正是我所採用的程序。你在尋找什麼樣的更好的方法? – Praveen
謝謝,是的,這是限制。最好想要一個沒有太多中間步驟的方法,因爲有了這個,每次我想要另一個百分點時,我都需要創建一個副本。 – dayum