NumPy的as_strided逆函数

3

我有一个4维张量x。计算6维张量y如下:

x = np.random.randn(64, 28, 28, 1)
strided_shape = 64, 26, 26, 3, 3, 1
y = numpy.lib.stride_tricks.as_strided(x, strided_shape, strides=(x.strides[0], x.strides[1], x.strides[2], x.strides[1], x.strides[2], x.strides[3]))

strided_shape 通常可以是任何形状,只要第一个和最后一个维度与 x 相同(这只是一个具体的例子)。

我的问题是,是否可以使用y (以及x.shapex.strides 这些元组)通过再次使用 as_stridedreshapesum 等操作来恢复原始张量 x?注意:我实际上并不打算将该过程应用于 y 本身;而是想对形状与y相同的张量执行该过程。


numpy.lib.stride_tricks.as_strided是相当冒险的,使用np.reshape和/或np.tile是否足够?这样可能更容易恢复。 - Dorian
1个回答

2

在这里,y 只是一个形状和步幅不同的 x 视图。因此,从 y 中恢复出 x 只需要将其形状和步幅更改回来即可。因此,假设在 x 转换为 y 之前保存了这些信息(假定这些信息已保存),那么操作就非常简单 -

x = np.lib.stride_tricks.as_strided(y, x.shape, x.strides)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接