Theano tensor切片...如何使用布尔切片?

时间:2016-05-24 23:15:05

标签: arrays numpy slice 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结果吗?我需要知道如何做到这一点,以便正确地实例化' givens'在theano函数声明中的参数。提前谢谢。

1 个答案:

答案 0 :(得分:4)

这是theano中的not supported

  

我们不支持布尔掩码,因为Theano没有布尔类型(我们使用int8作为逻辑运算符的输出)。

     

Theano使用“掩码”索引(不正确的方法):

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

像NumPy一样获得Theano结果:

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

所以你需要y = x[idx.nonzero()]