2.1Tensor和Numpy
Tensor和Numpy数组之间具有很高的相似性,彼此之间的互操作也非常简单高效。需要注意的是,Numpy和Tensor共享内存。由于Numpy历史悠久,支持丰富的操作,所以当遇到Tensor不支持的操作时,可先转成Numpy数组,处理后再转回tensor,其转换开销很小。
import numpy as np
a = np.ones([2, 3],dtype=np.float32)
a
array([[1., 1., 1.],
[1., 1., 1.]], dtype=float32)
b = t.from_numpy(a)
b
tensor([[1., 1., 1.],
[1., 1., 1.]])
b = t.Tensor(a) # 也可以直接将numpy对象传入Tensor
b
tensor([[1., 1., 1.],
[1., 1., 1.]])
a[0, 1]=100
b
tensor([[ 1., 100., 1.],
[ 1., 1., 1.]])
c = b.numpy() # a, b, c三个对象共享内存
c
array([[ 1., 100., 1.],
[ 1., 1., 1.]], dtype=float32)
注意: 当numpy的数据类型和Tensor的类型不一样的时候,数据会被复制,不会共享内存。
a = np.ones([2, 3])
# 注意和上面的a的区别(dtype不是float32)
a.dtype
dtype('float64')
b = t.Tensor(a) # 此处进行拷贝,不共享内存
b.dtype
torch.float32
c = t.from_numpy