我正在嘗試使用numpy.select來有條件地給數組賦值。然而,使用select需要對所有可能的任務,而不是僅僅的相關任務,這可能會導致DIV/0錯誤,例如計算:用numpy避免div/0錯誤
import numpy as np
def testfunc(z):
conditionlist = [z < 0, z == 0, z > 0]
choicelist = [1/z, 0, 1 + z]
return np.select(conditionlist, choicelist)
if __name__ == "__main__":
print testfunc(np.array([0]))
該代碼將失敗,DIV/0錯誤,雖然1/Z其中z = 0實際上不需要分配給返回的數組。
如何在不碰到div/0錯誤的情況下有條件地將值賦給numpy數組?循環是唯一的選擇嗎?
巧妙的把戲。你碰巧知道這種方法或循環是否更有效?一個循環將避免大量未使用的計算... – elhefe 2012-04-21 19:24:28
@elhefe:你應該確定(我是懶惰的),但我的直覺是,循環會慢得多。 – 2012-04-21 19:29:51