I’ve noticed that if I take slices of a big tensor with the standard numpy syntax (a = b[0:2]) and then save it to a file with pickle, the size is for the two tensors is the same.

What is actually happening?

I found that I can make the change of size effective by converting the newly created tensor to a numpy vector and then back to a tensor again but I’m sure there’s an easier way.

`a`

and `b`

will share the same memory, but some attributes in `a`

such as the size and possibly `storage_offset`

will be changed. Here is a small example

```
b = torch.zeros(3, 2)
a = b[1:3]
print(b)
> tensor([[0., 0.],
[0., 0.],
[0., 0.]])
a[:] = 1.
print(b)
> tensor([[0., 0.],
[1., 1.],
[1., 1.]])
print(a.storage_offset())
> 2
```

Note that I used other indices for slicing to demonstrate the `storage_offset`

.

If you want to create a copy, use `a = b[0:2].clone()`

1 Like

Thank you, now it’s clear!

1 Like