我試圖用 numpy 數組實現以下簡單條件,但輸出是錯誤的。dt = 1.0t = np.arange(0.0, 5.0, dt)x = np.empty_like(t)if np.where((t >=0) & (t < 3)): x = 2*telse: x=4*t我得到下面的輸出array([0., 2., 4., 6., 8.])但我期待著array([0., 2., 4., 12., 16.])感謝您的幫助!
3 回答

慕村225694
TA貢獻1880條經驗 獲得超4個贊
在文檔中查找np.where
:
注意:當僅提供條件時,該函數是 的簡寫?
np.asarray(condition).nonzero()
。直接使用nonzero
應該是首選,因為它對于子類的行為是正確的。本文檔的其余部分僅涵蓋提供所有三個參數的情況。
由于您不提供x
和y
參數,where
因此行為類似于nonzero
。?nonzero
返回 a?tuple
of?np.arrays
,轉換為 bool 后為 true。所以你的代碼最終評估為:
if?True: ????x?=?2*t
相反,您想使用:
x?=?np.where((t?>=?0)?&?(t?<?3),?2*t,?4*t)

慕仙森
TA貢獻1827條經驗 獲得超8個贊
的用法np.where
不同
dt = 1.0
t = np.arange(0.0, 5.0, dt)
x = np.empty_like(t)
x = np.where((t >= 0) & (t < 3), 2*t, 4*t)
x
輸出
[ 0.,? 2.,? 4., 12., 16.]

幕布斯6054654
TA貢獻1876條經驗 獲得超7個贊
在您的代碼中,if 語句不是必需的,并且會導致問題。
np.where() 創(chuàng)建條件,因此您不需要 if 語句。
這是您的代碼的工作示例,其中包含您想要的輸出
dt = 1.0
t = np.arange(0.0, 5.0, dt)
x = np.empty_like(t)
np.where((t >=0) & (t < 3),2*t,4*t)
添加回答
舉報
0/150
提交
取消