1.1 tensor

本文详细介绍PyTorch中Tensor的创建、初始化、数学运算、选取操作及转换方法,涵盖加法实现、尺寸查看、选取特定列、常见操作与numpy的互操作性,以及GPU加速运算技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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')

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值