2012-03-28 8 views
2

This postは、無効にしたい "機能"を示します。
現在のnumpyの行動:numpy fancyのインデックス作成と割り当てを無効にしますか?

>>> a = arange(10) 
>>> a[a>5] = arange(10) 
array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3]) 

それが問題だ理由:「壊れたべき乗則」を作るために、例えば(私はブレークポイントのいずれかの側の値の2つの異なるセットを持っている配列を望んでいたと言いますか、いくつかの他の単純な区分的関数)。 - 左右の形状が右サイドがスカラーではありませんを反対するが、numpyのは私が行うことができます

>>> x = empty(10) 
>>> a = arange(10) 
>>> x[a<=5] = 0 # this is fine 
>>> x[a>5] = a**2 # this is not 
# but what I really meant is this 
>>> x[a>5] = a[a>5]**2 

最初の行動、x[a>5] = a**2私は直感に反し考えると何かを生み出す:私は誤ってこのような何かを行う可能性がありますこの割り当て。他の投稿に指摘されているように、x[5:]=a**2は許可されていません。

私の質問:割り当てを実行する代わりにをExceptionにする方法はありますか?私はこの現象を疑うことはなかったので、コードに隠れているタイプミスをしていることを心配しています。

答えて

2

コアnumpy機能を無効にする方法はわかりません。代わりに動作を無効にするあなたはnp.selectを使用して試みることができる:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html

In [110]: x = np.empty(10) 
In [111]: a = np.arange(10) 
In [112]: x[a<=5] = 0 
In [113]: x[a>5] = a**2 
In [114]: x 
Out[114]: array([ 0., 0., 0., 0., 0., 0., 0., 1., 4., 9.]) 

In [117]: condlist = [a<=5,a>5] 
In [119]: choicelist=[0,a**2] 
In [120]: x = np.select(condlist,choicelist) 
In [121]: x 
Out[121]: array([ 0, 0, 0, 0, 0, 0, 36, 49, 64, 81]) 
+0

クール、それは素敵な回避策だ - 私は今、私のコードでそれを使用して起動します。明示的>暗黙的、すべての後... – keflavich

関連する問題