逐片遍历theano向量

Traversing theano vector slice by slice

假设我有一个长度为 30 的向量 x = [0.1, 0.2, 0.1, 0.1, 0.2, 0.4]。这个向量被一个 theano 张量包裹。

我想创建一个新向量,其大小与 x 相同,但将每 3 个大小的切片元素设置为它们的总和,然后对接下来的 3 个元素执行相同的操作,依此类推。

在示例中,第一个 3 长度切片总和为 0.4,第二个为 0.7,因此 r = [0.4, 0.4, 0.4, 0.7, 0.7, 0.7]

我该怎么做?使用 scan 是唯一的方法吗?

您可以在 numpy 中执行以下操作:

import numpy as np
x = np.array([0.1, 0.2, 0.1, 0.1, 0.2, 0.4])
y = (x.reshape(-1, 3).mean(1)[:, np.newaxis] * np.ones(3)).ravel()

print(y)

在 theano 中,你可以以非常相似的方式进行:

import theano
import theano.tensor as T

xx = T.fvector()
yy = (xx.reshape((-1, 3)).mean(axis=1).reshape((-1, 1)) * T.ones(3)).ravel()

print(yy.eval({xx: x.astype('float32')}))