2012-04-21 3 views
2

numpy.selectを使用して配列に条件付きで値を割り当てようとしています。しかし、選択の使用は、DIV/0エラーが発生する可能性がいうだけで、関連する割り当てよりも、すべての可能な割り当て、例えばの計算を必要とします。numpy.selectで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配列に条件付きで値を割り当てる方法はありますか?ループは唯一のオプションですか?

答えて

4
np.select([z < 0, z == 0, z > 0], [1/(z + (z == 0)), 0, 1 + z]) 

z == 0はブール値の配列を与える。これをzに追加すると、np.selectが使用するインデックスのために、ゼロ要素のない配列がzに等しくなります。

+0

ニートトリック。このアプローチやループがより効率的であるかどうか、ご存知ですか?ループは、未使用の計算をたくさん避けるでしょう... – elhefe

+0

@elhefe:私は(私は怠惰な)確かに測定する必要がありますが、私の直感はループが**多く**遅くなるということです。 –

1

numpy.seterrを使用すると、ゼロ除算の動作をraiseから他のものに変更できます。

関連する問題