mat*_*ter 3 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])
Run Code Online (Sandbox Code Playgroud)
我需要在 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.])
Run Code Online (Sandbox Code Playgroud)
有人可以解释 theano 结果并建议如何获得 numpy 结果吗?我需要知道如何做到这一点,以便在 theano 函数声明中正确实例化“给定”参数。提前致谢。
Theano不支持此功能:
我们不支持布尔掩码,因为 Theano 没有布尔类型(我们使用 int8 作为逻辑运算符的输出)。
Theano 索引与“掩码”(不正确的方法):
Run Code Online (Sandbox Code Playgroud)>>> t = theano.tensor.arange(9).reshape((3,3)) >>> t[t > 4].eval() # an array with shape (3, 3, 3) ...获得像 NumPy 这样的 Theano 结果:
Run Code Online (Sandbox Code Playgroud)>>> t[(t > 4).nonzero()].eval() array([5, 6, 7, 8])
所以你需要 y = x[idx.nonzero()]