tensor基本操作(和numpy对比)

创建数组

如何使用list生成一维(多维)tensor

import torch
import numpy as np
#创建一个未初始化的tensor
x = torch.empty(2,3) 
#numpy中无对应

#初始化一个随机的tensor
x = torch.rand(2,3)
#x = np.random.random((2,3))

#初始化一个long型全0的tensor
x = torch.zeros(2,3,dtype=torch.long)
#x = np.zeros((2,3))

#初始化一个long型全1的tensor
x = torch.ones(2,3,dtype=torch.long)
#x = np.ones((2,3))

#初始化一个long型对角全为1的tensor
x = torch.eye(3,dtype=torch.long)
#x = np.eye(3)

#初始化一个确定好数值的tensor
x = torch.tensor([[5,5,2],[1,2,3]])
#x = np.array([[5,5,2],[1,2,3]])

#获取tensor的形状
x.shape 
x.size()
#np格式,x.shape,x.size

数组基本操作

加减乘除

不同数组点乘
a = torch.ones(2,2, dtype=int)
b = torch.tensor([[1,2],[3,4]])
c = torch.matmul(a,b)
#c = a.dot(b) np格式
改变tensor的shape、增加新的维度
#改变tensor的shape
d = a.view(-1,1)
#d的sharpe为(4,1)
#d = a.reshape((4,1)),np的格式
#a.resize(4,1)

#展开为一维
e = a.flatten()
#e = a.flatten(),numpy格式一模一样

#不同维度
e = a.reshape(4,1)
e = a.resize(4,1)
#numpy和这个一模一样
#增加新的维度
d = a.unsqueeze(0)
e = d.squeeze(0)

tensor合并分割

tensor分割
#等分用chunk
# 创建一个4×3的矩阵
t1 = torch.arange(12).reshape(4, 3)
t1
# tensor([[ 0,  1,  2],
#        [ 3,  4,  5],
#        [ 6,  7,  8],
#        [ 9, 10, 11]])
t2, t3 = torch.chunk(t2,2,dim=0)

#自定义分割用split
t4,t5 = torch.split(t2,[1,3], dim=0)
tensor合并
a = torch.zeros(2, 3)
a
# tensor([[0., 0., 0.],
#         [0., 0., 0.]])
b = torch.ones(2, 3)
b
# tensor([[1., 1., 1.],
#         [1., 1., 1.]])
torch.cat((a, b), dim = 0)
# tensor([[0., 0., 0.],
#         [0., 0., 0.],
#         [1., 1., 1.],
#         [1., 1., 1.]])
##和np一样,np.concatenate((a,b),dim=0)

#tensor堆叠
torch.stack((a, b), dim = 0)
#np.stack((a, b), dim = 0)

numpy和tensor相互转换

两个函数所产生的的Tensor和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另一个也会改变!
tensor转换为np,内存一致;np转换为tensor内存,内存不一致

a = torch.ones(5)
#转化为numpy只有这一种方法
b = a.numpy()
#转化为tensor,c种方法共享内存,d不共享内存
c = torch.from_numpy(b)
d = torch.tensor(b)
#np转tensor
a = np.ones(3)
b = torch.from_numpy(a)
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)
    #[1. 1. 1.] tensor([1., 1., 1.], dtype=torch.float64) 
    #[2. 2. 2.] tensor([2., 2., 2.], dtype=torch.float64) 
    #[3. 3. 3.] tensor([3., 3., 3.], dtype=torch.float64)
#使用torch.tensor()将NumPy数组转换成Tensor(不再共享内存)
c = torch.tensor(a)
a += 1
print(a, c)
[4. 4. 4.] tensor([3., 3., 3.], dtype=torch.float64)
#tensor转np
a = torch.ones(5)
b = a.numpy()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值