我有一個 NumPy 整數數組,想用 nans 替換一些值。這需要將類型轉換為浮點數,如果我這樣做很天真:import numpy as npx = np.arange(5)# 1)x = x.astype(float)[x==2]=np.nan# 2) this does not change the values inside x# x.astype(float)[x==2]=np.nan我有AttributeError: 'float' object has no attribute 'astype'在1) 的情況下,在2)中沒有變化。如果我之前重新定義類型,一切正常x:x = np.arange(5)x = x.astype(float)x[x==2]=np.nan# array([ 0., 1., nan, 3., 4.])這里發生了什么?我認為錯誤消息指的是,np.nan但我不知道發生了什么。編輯:如果沒有重新定義,我怎么能寫呢,即。在一條線上?
1 回答

慕標琳琳
TA貢獻1830條經驗 獲得超9個贊
我總結了來自@Swier、@MrFuppes 和@hpaulj 的評論的所有回復,這些回復回答了這個問題。
x.astype(float)
生成一個新數組,而不是視圖——它x
以浮點數形式返回,然后可以將其分配給其他對象(在我的示例中,我用 覆蓋了現有的x
)x = x.astype(float)
。
另一方面,x[x==2] = np.nan
將 nans 分配給現有數組的某些值,它不會返回任何內容。修改它不會修改原來的數組x
。
要在一行中做我想做的事,可以使用np.where
:
x = np.where(x==2, np.nan, x.astype(float))
添加回答
舉報
0/150
提交
取消