从 Theano 数组中删除 inf

Remove inf from Theano array

假设我在 Theano 中有一个向量,其中一些元素是 inf,我该如何删除它们?考虑以下示例:

import numpy as np
import theano
from theano import tensor
vec = tensor.dvector('x')
fin = vec[(~tensor.isinf(vec)).nonzero()]
f = theano.function([vec], fin)

根据 Theano 文档,这应该通过索引删除元素。然而,情况并非如此 f([1,2,np.inf]) returns array([ 1., 2., inf])

我怎样才能做到 f([1,2,np.inf]) returns array([ 1., 2.]) ?

我找到了一个尴尬的解决方法

import theano
import theano.tensor as T
import numpy as np

vec = T.vector()
compare = T.isinf(vec)
out = vec[(1-compare).nonzero()]

v = [  1.,   1.,   1.,   1.,  np.inf,   3.,   4.,   5.,   6.,  np.inf]
v = np.asarray(v)

out.eval({var:v})
array([ 1.,  1.,  1.,  1.,  3.,  4.,  5.,  6.])

以你的例子为例:

fin = vec[(1-T.isinf(vec)).nonzero()]
f = theano.function([vec], fin)

f([1,2,np.inf])
array([ 1.,  2.])