# Numpy to tensor changes values dramatically?

Hi everyone,

I’m struggling with the following issue, and can’t find a possible explanation (I’m quite the pytorch amateur, so please forgive me for not finding possible obvious solutions).
I’m feeding MR images to a 3D Unet, and reshape the already normalized numpy array `image` like this:

imagefinal=(image.reshape(1,1, image.shape[0], image.shape[1], image.shape[2]))

after which I convert it to a tensor using

tensor_x = torch.from_numpy(imagefinal).float()

However, using

print(imagefinal.max())

print(torch.max(tensor_x))

returns

1.0
tensor(2652589.7500, device=‘cuda:0’)
1.0
tensor(4033200., device=‘cuda:0’)
1.0
tensor(3447660.5000, device=‘cuda:0’)
1.0
tensor(3224289., device=‘cuda:0’)
1.0

Do you have any idea why the maximum value of the array would change to very large values after converting it to a tensor? I’ve tried forcing the tensor to be of different datatypes with no success. Is there something obvious I’m missing here?

Consider this toy example:

``````np_array = np.random.randn(2,3,4)
print(np_array.shape, np_array.dtype, np_array.max())
>>((2, 3, 4), dtype('float64'), 2.2915268560525193)
tensor = torch.from_numpy(np_array)
print(tensor.shape, tensor.dtype, tensor.max())
>>torch.Size([2, 3, 4]) torch.float64 tensor(2.3412, dtype=torch.float64)
``````

Everything is as expected. Notice, that default numpy float type is `float64`, torch is `float32`. So, you may convert float64 to float32 and have possible overflow (which I am a bit doubt). I would also suggest to carefully review if you may change `imagefinal` somewhere in the code before converting to tensor.

Hi Alexey,

Thank you very much for your reply. After some additional digging, I found the problem. I’m masking my MR image arrays with the `np.ma.masked_array` function, returning a `MaskedArray` datatype. I wasn’t able to find an explanation for this online, but `torch.from_numpy` doesn’t seem able to directly copy values from MaskedArray types. After first converting the MaskedArray to a normal numpy array using `x=np.asarray(MaskedArray)`, the `torch.from_numpy` function works as intended.

Best,

Laurens

Good to hear, you figure it out.

Cheers,
Alexey