逐片遍历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')}))
假设我有一个长度为 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')}))