这里写目录标题 chapter 1 numpy chapter 2 torch chapter 3
chapter 1 numpy
import numpy as np
import torch
######################### chapter 1 numpy #########################
# 1 numpy与torch类型数据相互转换
a = np.random.randint(0,10,[3,3])
a_t = torch.from_numpy(a)
a.dtype # dtype('int64')
a_t.dtype # torch.int64
np.array(a_t).dtype # dtype('int64')
a_t.numel() # 元素个数
a_t[0,0].item() # 转换成标量
help(np.abs) # 查看帮助# 2 将列表、元祖转换成数组
a_list = [1,2,3,4]
a_tuple = (1,2,3)
a_l = np.array(a_list)
a_t = np.array(a_tuple)
a_l.dtype,a_t.dtype # (dtype('int64'), dtype('int64'))# 3 利用random模块生成数组
np.random.random(size=[2,3]) ## 生成(0~1)的随机数
np.random.sample([2,2]) ## 生成[2,2]的随机浮点数
np.random.uniform(size=[2,3,2]) ## 生成[2,3,2]的均匀随机
np.random.randn(1,2) # 生成[2,2]的标准正态分布
np.random.randint(1,10,[3,3])
np.random.normal(20,10,[2,3])np.random.seed(10)
t = np.arange(10)
t # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.random.shuffle(t)
t # array([1, 6, 8, 7, 0, 5, 2, 3, 4, 9])# 4 创建特定形状的多维数组
np.zeros([2,3])
np.ones([2,3])
np.empty([2,2]) # 空数组,初始值为垃圾值
np.zeros_like(t)
np.ones_like(t)
np.empty(t)
np.eye(3)
np.full([3,3],666)
np.diag([1,2,3])
np.save(t,'path')
t = np.load('path')# 5 利用arange、linspace函数生成数组
np.arange(start=10,stop=20,dtype = np.float32) # array([10., 11., 12., 13., 14., 15., 16., 17., 18., 19.], dtype=float32)
np.arange(start=10,stop=20,step=2) # array([10, 12, 14, 16, 18])
np.arange(start=9,stop=1,step=-2) # array([9, 7, 5, 3])
np.linspace(0,100,8) # array([ 0. , 14.28571429, 28.57142857, 42.85714286, 57.14285714, 71.42857143, 85.71428571, 100. ])
np.logspace(0,10,10)# 6 获取元素
np.random.seed(10)
t = np.random.random(10)
t[4]
t[2:6]
t[::2]
t[::-3]
t = np.reshape([5,5])t = np.random.random(24).reshape([4,6])
t[2:3,0:2]
t[[0,3],[2,4]]
t[[0,3],2:5]
t[(t>0.2)&(t<0.8)]l = np.arange(20)
t = np.random.choice(l,[2,3]) # 不可重复抽
t = np.random.choice(l,[2,3],replace=True) # 可重复抽
t = np.random.choice(l,[2,3],p=l/l.sum()) # 按概率抽# 7 对应元素相乘
a = np.random.randint(0,10,[2,2])
b = np.random.randint(0,10,[2,2])
a*b # 对应元素相乘
np.multiply(a,b)
a/b
a%b
a//bX1=np.array([[1,2],[3,4]]) # 点积,矩阵乘法
X2=np.array([[1,2,3],[4,5,6]])
X1.dot(X2)# 8 更改数组的形状
X2=np.array([[1,2,3],[4,5,6]])
X2.resize(3,2) # 修改数组本身
X2.reshape([2,3]) # 不修改数组本身
X2.shape # (3, 2)
X2.T
X2.ravel()
X2.flatten()
X2[None][...,None]t = X2[None][...,None] # (1, 2, 3, 1)
t.shape
t.squeeze().shape # (2, 3)
t = X2[None][::,::,None] # (1, 2, 1, 3)
t.transpose([0,3,2,1]).shape # (1, 3, 1, 2)# 9 合并数组
a = np.arange(9)
a.resize([3,3])
b = np.random.random([3,3])
np.concatenate([a,b],0).shape # (6, 3)
np.concatenate([a,b],1).shape # (3, 6)
np.stack([a,b]).shape # (2, 3, 3)
np.hstack([a,b]).shape # (3, 6)
np.vstack([a,b]).shape # (6, 3)
np.vstack([a[None],b[None]]).shape # (2, 3, 3)
np.hstack([a[None],b[None]]).shape # (1, 6, 3)
np.dstack([a[None],b[None]]).shape # (1, 3, 6)
np.append(a.ravel(),b.ravel()).shape # (18,)
np.vsplit(a,3)# 10 批量处理
np.random.seed(123)
d = np.random.random([1000,3])
np.random.shuffle(d)
N = len(d)
bs = 110 # batch_size
for i in range(0,N,bs):x = d[i:i+bs]print(x.shape)# 11 Numpy中的几个常用通用函数
a = np.arange(9)
a.resize([3,3])
np.sqrt(a)
np.square(a)
np.abs(a)
a.dot(a)
np.log(a)
np.exp(a)
np.cumsum(a)
np.cumsum(a,1)
a.sum(1)
a.mean(0)
np.median(a)
np.median(a,1)
np.std(a)
np.var(a)
np.coorcoef(a)# 12 math与numpy函数的性能比较
import time
import numpy as np
import math
a = [i*0.001 for i in range(100000000)]
start = time.time()
for i,j in enumerate(a):a[i] = math.sin(j)
print(time.time()-start)a = [i*0.001 for i in range(100000000)]
start = time.time()
a = np.sin(a)
print(time.time()-start)# 13 广播机制
a = np.arange(4).reshape(4,1)
b = np.arange(6).reshape(1,6)
(a+b).shape # (4, 6)
chapter 2 torch
import numpy as np
import torch
x = torch. tensor( [ 10.0 ] )
x. device
import torch
x= torch. tensor( [ 1 , 2 ] )
y= torch. tensor( [ 3 , 4 ] )
z= x. add( y)
print ( z)
print ( x)
x. add_( y)
print ( x)
torch. Tensor( [ 1 ] )
torch. tensor( [ 1 ] )
torch. Tensor( 10 )
torch. eye( 2 , 4 )
torch. zeros( 2 , 3 )
torch. linspace( 1 , 10 , 4 )
torch. rand( 2 , 3 )
torch. randn( 2 , 3 )
chapter 3