目录
- pytorch的基本元素操作
-
- 创建一个没有初始化的矩阵
- 创建一个有初始化的矩阵
- 创建一个全0矩阵并可指定数据元素类型为long
- 直接通过数据创建张量
- 通过已有的一个张量创建相同尺寸的新张量
- 利用randn_like方法得到相同尺寸张量,并且采用随机初始化的方法为其赋值
- 采用.size()方法来得到张量的形状
- 加法
- 切片操作
- 改变张量的形状
- [如果张量中只有一个元素,可以用item()将值取出,作为一个python number](#如果张量中只有一个元素,可以用item()将值取出,作为一个python number)
- [torch tensor和numpy array之间的互相转换](#torch tensor和numpy array之间的互相转换)
- [关于cuda tensor:tensor可以用.to()方法将其移动到任意设备上](#关于cuda tensor:tensor可以用.to()方法将其移动到任意设备上)
pytorch的基本元素操作
python
from __future__ import print_function
import torch
创建一个没有初始化的矩阵
python
x=torch.empty(5,3)
print(x)
![](https://file.jishuzhan.net/article/1684153874962714625/903517fb0a3149eea111367a54a2bb40.png)
创建一个有初始化的矩阵
python
x=torch.rand(5,3)
print(x)
![](https://file.jishuzhan.net/article/1684153874962714625/db3077397ca14b2d80bff87d58991afb.png)
![](https://file.jishuzhan.net/article/1684153874962714625/36976aa9a779437582e1547f2ed3f1c2.png)
创建一个全0矩阵并可指定数据元素类型为long
python
x=torch.zeros(5,3,dtype=torch.long)
print(x)
![](https://file.jishuzhan.net/article/1684153874962714625/40c6716b01ae4d0eba51a1511a13d5ca.png)
直接通过数据创建张量
python
x=torch.tensor([2,5,3,5])
print(x)
![](https://file.jishuzhan.net/article/1684153874962714625/7fa7a0434d544cb7972384c934763b2a.png)
通过已有的一个张量创建相同尺寸的新张量
python
x=x.new_ones(5,3,dtype=torch.double)
print(x)
![](https://file.jishuzhan.net/article/1684153874962714625/cb053f353df3497aa417ac5216ab7379.png)
利用randn_like方法得到相同尺寸张量,并且采用随机初始化的方法为其赋值
python
y=torch.randn_like(x,dtype=torch.float)
print(y)
![](https://file.jishuzhan.net/article/1684153874962714625/e08ed668fc4f4ef9bf8cf86cab647382.png)
采用.size()方法来得到张量的形状
python
print(x.size())
![](https://file.jishuzhan.net/article/1684153874962714625/1f88876c1d4c406398955638a8c987a0.png)
加法
第一种方法
python
x=torch.randn(5,3)
y=torch.randn(5,3)
print(x+y)
第二种方法
python
print(torch.add(x,y))
第三种方法
python
result=torch.empty(5,3)
torch.add(x,y,out=result)
print(result)
第四种方式:原地置换(执行的是y=y+x)
python
y.add_(x)
print(y)
注意
切片操作
python
x[:,1]
![](https://file.jishuzhan.net/article/1684153874962714625/41c4cb52f13947708af30a5e8e9c8a58.png)
改变张量的形状
python
x=torch.randn(4,4)
y=x.view(16)
z=x.view(-1,8)
x.size(),y.size(),z.size()
![](https://file.jishuzhan.net/article/1684153874962714625/84af23358bb14a3e8d28eb28eb3988c1.png)
如果张量中只有一个元素,可以用item()将值取出,作为一个python number
python
x=torch.randn(1)
print(x,x.item())
![](https://file.jishuzhan.net/article/1684153874962714625/82ab1b15fee147e6926299d339c91e95.png)
torch tensor和numpy array之间的互相转换
python
a=torch.ones(5)
b=a.numpy()
a.add_(1)
print(a,b)
![](https://file.jishuzhan.net/article/1684153874962714625/f71c07d6f37a455d98647d0f23bdbafd.png)
python
import numpy as np
a=np.ones(5)
b=torch.from_numpy(a)
np.add(a,1,out=a)
print(a,b)
注意
关于cuda tensor:tensor可以用.to()方法将其移动到任意设备上
windows
mac
python
if torch.backends.mps.is_available():
device=torch.device('mps')
#cpu上创建x,gpu上创建y
x=torch.randn(1)
y=torch.ones_like(x,device=device)
x=x.to(device)
#此时x,y都在gpu上
z=x+y
print(z)
#再将z转移到cpu上
print(z.to('cpu',torch.float32))