我想對其中包含很多“nan”的矩陣進行一些操作。目標是逐列遍歷矩陣,如果其中有一個常數值,則將所有 nan 填充在一列中。即,如果一列(除了nan)始終具有相同的值,則該列中的所有nan 都應填充該值。
即輸入可能看起來像下面的矩陣。第二列現在應該全部用 2.0 填充,但最后一列應該保持原樣。我包含了執行此操作的代碼,但我希望以更有效的方式擁有它,因為它將應用于大型矩陣。
#INPUT
[[0.15266373 nan 0.06203641 0.45986034 nan]
[0.92699705 nan 0.76849622 0.26920507 nan]
[0.09337326 2. 0.58961375 0.34334054 nan]
[0.62647321 2. 0.55225681 0.26886006 2. ]
[0.2229281 nan 0.39064809 0.19316241 3. ]]
# OUTPUT
[[0.15266373 2. 0.06203641 0.45986034 nan]
[0.92699705 2. 0.76849622 0.26920507 nan]
[0.09337326 2. 0.58961375 0.34334054 nan]
[0.62647321 2. 0.55225681 0.26886006 2. ]
[0.2229281 2. 0.39064809 0.19316241 3. ]]
# CODE FOR MOCK MATRIX AND FILLING OF NANs
# -----------------------------------------
import numpy as np
# PREP OF MOCK MATRIX
np.random.seed(777)
a = np.random.rand(5, 5)
a[:,1] = np.nan
a[[2, 3],1] = 2.0
a[:,4] = np.nan
a[4,4] = 3.0
a[3,4] = 2.0
# FILL THE WANTED STRUCTURE
for c in range(a.shape[1]):
values = np.unique(a[~np.isnan(a[:,c]),c])
if values.size == 1:
a[:,c] = values
任何幫助表示贊賞。最好的
uj5u.com熱心網友回復:
這是一種方法:
colmin = np.nanmin(a, axis=0)
colmax = np.nanmax(a, axis=0)
b = (colmin == colmax)
a[:,b] = colmin[b]
如果存在全 NaN 列,則會給出 RuntimeWarning,如果您希望隱藏這些列,請參見此處。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453051.html
下一篇:將串列添加到現有csv
