1.
from __future__ import print_function
import torch as t
x=t.Tensor(5,3)#构建5*3矩阵,只是分配了空间,并未初始化
print(x)
2.
from __future__ import print_function
import torch as t
x=t.randn(5,3)#使用[0,1]均匀分布随机初始化二维数组
print(x)
print(x.size())#查看x的形状
x.size()[1]
x.size()(1)#查看列的个数,两种写法等价
3. 3种加法实现
x + y#加法
t.add(x,y)#加法
result=t.Tensor(5,3)#预先分配空间
t.add(x,y,out=result)#输出到result
4.add用法
y.add(x)#普通加法,不改变y的值
y.add_(x)#inplace加法,y改变
note:函数名后面带下画线_的函数会修改Tensor本身。
5.Tensor的选取操作与numpy类似
x[:,0]
print(x[:,0])#x的第1列
x[:,1]
print(x[:,1])#x的第2列
6.Tensor支持很多操作,包括数学运算、线性代数、选择、切片等,其接口设计与numpy极为相似。Tensor和numpy的数组间的互操作非常容易。Tensor不支持的操作,可以先转为numpy数组处理,之后再转为Tensor。
6.1
a=t.ones(5)#新建一个全是1的Tensor
print(a)
out: tensor([ 1., 1., 1., 1., 1.])
6.2
a=t.ones(5)#新建一个全是1的Tensor
b=a.numpy()#Tensor转换成Numpy
print(b)
out: [1. 1. 1. 1. 1.]
6.3
import numpy as np
a=np.ones(5)#新建一个全是1的Tensor
b=t.from_numpy(a)#Numpy转换成Tensor
print(a)
print(b)
out:
[1. 1. 1. 1. 1.]
tensor([ 1., 1., 1., 1., 1.], dtype=torch.float64)
7.Tensor和Numpy对象共享内存,所以它们之间的转换很快,几乎不消耗资源。即:一个变,另外一个也跟着变。
import numpy as np
a=np.ones(5)#新建一个全是1的Tensor
b=t.from_numpy(a)#Numpy转换成Tensor
b.add_(1)
print(a)
print(b)
out:
[2. 2. 2. 2. 2.]
tensor([ 2., 2., 2., 2., 2.], dtype=torch.float64)
8.Tensor可通过.cuda方法转为GPU的Tensor,这样可以体验到GPU的加速运算效果。
8.1 计算不加速运算时间
import time
import torch as t
x=t.ones(5,3)#构建5*3矩阵,只是分配了空间,并未初始化
y=t.ones(5,3)
time_start = time.time () # time.time()为1970.1.1到当前时间的毫秒数
z=x+y
time_end = time.time ()
print(time_end - time_start)
print(z)
out:
0.011574983596801758
tensor([[ 2., 2., 2.],
[ 2., 2., 2.],
[ 2., 2., 2.],
[ 2., 2., 2.],
[ 2., 2., 2.]])
8.2 计算cuda加速运算时间
import time
import torch as t
x=t.ones(5,3)#构建5*3矩阵,只是分配了空间,并未初始化
y=t.ones(5,3)
if t.cuda.is_available():
x=x.cuda()
y=y.cuda()
time_start = time.time () # time.time()为1970.1.1到当前时间的毫秒数
z=x+y
time_end = time.time ()
print(time_end - time_start)
print(z)
out:
0.00023865699768066406
tensor([[ 2., 2., 2.],
[ 2., 2., 2.],
[ 2., 2., 2.],
[ 2., 2., 2.],
[ 2., 2., 2.]], device='cuda:0')