GWSurfer
GWSurfer

Reputation: 51

Issue while reshaping a torch tensor from [10,200,1] to [2000,1,1]

I am having a problem when trying to reshape a torch tensor Yp of dimensions [10,200,1] to [2000,1,1]. The tensor is obtained from a numpy array y of dimension [2000,1]. I am doing the following:

Yp = reshape(Yp, (-1,1,1))

I try to subtract the result to a torch tensor version of y by doing:

Yp[0:2000,0] - torch.from_numpy(y[0:2000,0])

I expect the result to be an array of zeros, but that is not the case. Calling different orders when reshaping (order = 'F' or 'C') does not solve the problem, and strangely outputs the same result when doing the subtraction. I only manage to get an array of zeros by calling on the tensor Yp the ravel method with order = 'F'.

What am I doing wrong? I would like to solve this using reshape!

Upvotes: 1

Views: 781

Answers (1)

benjaminplanche
benjaminplanche

Reputation: 15119

I concur with @linamnt's comment (though the actual resulting shape is [2000, 1, 2000]).

Here is a small demonstration:

import torch
import numpy as np

# Your inputs according to question:
y = np.random.rand(2000, 1)
y = torch.from_numpy(y[0:2000,0])
Yp = torch.reshape(y, (10,200,1))

# Your reshaping according to question:
Yp = torch.reshape(Yp, (-1,1,1))
# (note: Tensor.view() may suit your need more if you don't want to copy values)

# Your subtraction:
y_diff = Yp - y
print(y_diff.shape)
# > torch.Size([2000, 1, 2000])
# As explained by @linamnt, unwanted broadcasting is done 
# since the dims of your tensors don't match

# If you give both your tensors the same shape, e.g. [2000, 1, 1] (or [2000]):
y_diff = Yp - y.view(-1, 1, 1)
print(y_diff.shape)
# > torch.Size([2000, 1, 1])

# Checking the result tensor contains only 0 (by calculing its abs. sum):
print(y_diff.abs().sum())
# > 0

Upvotes: 1

Related Questions