2016-05-24 6 views
3

、私はブール配列を持っている場合、私は別の配列の要素を選択するためにそれを使用することができます:Theanoテンソルスライス...どのようにスライスするためにブール値を使用するのですか? numpyので

>>> import numpy as np 
>>> x = np.array([1, 2, 3]) 
>>> idx = np.array([True, False, True]) 
>>> x[idx] 
array([1, 3]) 

私はtheanoでこれを行う必要があります。これは私が試したものですが、私は予期しない結果を得ました。

>>> from theano import tensor as T 
>>> x = T.vector() 
>>> idx = T.ivector() 
>>> y = x[idx] 
>>> y.eval({x: np.array([1,2,3]), idx: np.array([True, False, True])}) 
array([ 2., 1., 2.]) 

誰かがtheanoの結果を説明し、numpyの結果を得る方法を提案できますか?私はtheano関数宣言で 'givens'引数を適切にインスタンス化するためにこれを行う方法を知る必要があります。前もって感謝します。

+1

を必要とするあなたは 'です[ '[True、False、True]は' [0、1、0] 'と解釈されたので、1,2,1,2]' – Eric

+1

ありがとう!私はあなたが何を意味するかを見ます:[真、偽、真]は[1,0,1]と評価します。あなたはそれをnumpyの結果に評価させる方法を知っていますか? numpyのようなブーリアンスライシングを行う方法はありますか? – matlibplotter

+0

おっと、そういうわけで、0と1を入れ替えてみました。私の答えを参照してください – Eric

答えて

4

これはtheanoでnot supported次のとおりです。

Theanoはboolean型を(私たちは、論理演算子の出力にINT8使用)を持っていないと我々は、ブールマスクをサポートしていません。 「マスク」(間違ったアプローチ)と

Theanoのインデックス:

>>> t = theano.tensor.arange(9).reshape((3,3)) 
>>> t[t > 4].eval() # an array with shape (3, 3, 3) 
... 

Theanoはnumpyのような結果行き方:

>>> t[(t > 4).nonzero()].eval() 
array([5, 6, 7, 8]) 

ですから、y = x[idx.nonzero()]

+0

ありがとう!これはまさに私が探していたものです。 =) – matlibplotter

+0

これは何時間も続きました。どうもありがとうございます。これに関するT.nonzero [here](http://deeplearning.net/software/theano/library/tensor/basic.html)のTheanoドキュメントは*空です*! – user27886

+0

@ user27886: 'T.nonzero'は[' np.nonzero() ']と同じです(https://docs.scipy.org/doc/numpy/reference/generated/numpy.nonzero.html#numpy.nonzero )、これは文書化されています – Eric

関連する問題