如何将比较操作(mini,gt)应用于Theano变量数组?

问题描述 投票:1回答:1

我正在尝试用PyMC3进行贝叶斯校准;但是,我的模型函数需要比较Theano变量的数组。

这里是问题的说明:

import theano.tensor as tt

 # create an example of array of Theano variables
a=np.array([tt.as_tensor_variable(1)*1,tt.as_tensor_variable(1)*2])

 # try to apply operations of comparison

tt.gt(a,1)

->AsTensorError: ('Cannot convert [Elemwise{mul,no_inplace}.0 Elemwise{mul,no_inplace}.0] to TensorType', <class 'numpy.ndarray'>)*

a>1

-> TypeError: Variables do not support boolean operations.

有谁知道如何管理?

python numpy theano pymc3
1个回答
1
投票

如果你已经拥有了ndarray的NumPy TensorVariables,那么你可以把它转储到一个列表中:

a = np.array([tt.as_tensor_variable(1)*1, tt.as_tensor_variable(1)*2])

res = tt.gt(a.tolist(), 1)
res.eval()
# array([False, True])

但是,如果可以,我会完全避免使用NumPy。

a = [tt.as_tensor_variable(1)*1, tt.as_tensor_variable(1)*2]

res = tt.gt(a, 1)
res.eval()
# array([False, True])

更好的是,TensorVariable类型已经完全支持多维度,并且坚持使用theano.tensor中的方法,人们将获得比来回移动到listndarray对象更高效的性能。例如,

a = tt.as_tensor([1,2])

res = tt.gt(a, 1)
res.eval()
# array([False, True])
© www.soinside.com 2019 - 2024. All rights reserved.