问题
I have a 4-tensor x. The 6-tensor y is computed as follows:
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 in general can be any shape as long as the first and last dimensions match those of x (this is just a concrete example).
My question is, using y (and the x.shape and x.strides tuples), is it possible to recover the original tensor x, using as_strided again, reshape, sum, etc.? Note: I am not actually planning on applying said process to y itself; rather I want to perform the procedure on a tensor with the same shape as y.
回答1:
Well y is simply a view into x, with different shape and strides. As such, recovering x from y is simply changing back the shape and strides. So, given those (assuming those are saved before the x to y conversion), it would be simply -
x = np.lib.stride_tricks.as_strided(y, x.shape, x.strides)
来源:https://stackoverflow.com/questions/62447526/inverse-function-of-numpy-as-strided