numpy数组维度互换函数swapaxes
由于本次写的程序需要将数据数组除了batch之外,每次需要二次分组。所以处理数据维度又多了一层,但是经常需要变换两个分组的维度。此处用到swapaxes函数。数组是numpy库的。
num = np.random.random((2,3,4))
print(num)
num = np.swapaxes(num,0,2)
print(num)
# [[[0.0372153 0.56444485 0.30521904 0.10190487]
# [0.88590199 0.05494382 0.92141733 0.45761658]
# [0.67246559 0.20745557 0.24289462 0.52821502]]
#
# [[0.91978977 0.00412304 0.58665158 0.53105978]
# [0.59273119 0.09831343 0.07644877 0.12664533]
# [0.24492794 0.59717912 0.47824424 0.19823922]]]
# [[[0.0372153 0.91978977]
# [0.88590199 0.59273119]
# [0.67246559 0.24492794]]
#
# [[0.56444485 0.00412304]
# [0.05494382 0.09831343]
# [0.20745557 0.59717912]]
#
# [[0.30521904 0.58665158]
# [0.92141733 0.07644877]
# [0.24289462 0.47824424]]
#
# [[0.10190487 0.53105978]
# [0.45761658 0.12664533]
# [0.52821502 0.19823922]]]
从历程可以看出,函数可以实现数组或者矩阵任意两个维度互换。
下面这个函数是pytorch的多个维度互换函数permute
其参数值为原维度,参数位置为改变后维度。
import torch
num = torch.rand(2,3,4)
print(num.size())
print(num)
num = num.permut(1,2,0)
print(num.size())
print(num)
# Size([2, 3, 4])
# tensor([[[0.1333, 0.8830, 0.8496, 0.3784],
# [0.4283, 0.0245, 0.6624, 0.3985],
# [0.8402, 0.8040, 0.5102, 0.0581]],
# [[0.6492, 0.2072, 0.9122, 0.4166],
# [0.3939, 0.8211, 0.9439, 0.8549],
# [0.9574, 0.7813, 0.1646, 0.6591]]])
# torch.Size([3, 4, 2])
# tensor([[[0.1333, 0.6492],
# [0.8830, 0.2072],
# [0.8496, 0.9122],
# [0.3784, 0.4166]],
# [[0.4283, 0.3939],
# [0.0245, 0.8211],
# [0.6624, 0.9439],
# [0.3985, 0.8549]],
# [[0.8402, 0.9574],
# [0.8040, 0.7813],
# [0.5102, 0.1646],
# [0.0581, 0.6591]]])
训练集随机打乱顺序函数
permutation和shuffle的区别是前者生成新数组,后者对原数组进行操作,无返回值。
permutation
Reference:https://blog.csdn.net/Song_Lynn/article/details/82817647
# train_X:3列, train_y
per = np.random.permutation(train_X.shape[0]) #打乱后的行号
new_train_X = train_X[per, :, :] #获取打乱后的训练数据
new_train_y = trainy[per]
shuffle
https://blog.csdn.net/lyy14011305/article/details/76207327/
a = np.arange(12)
print a
np.random.shuffle(a)
print a
print
a = np.arange(12)
print a
b = np.random.permutation(a)
print b
print a
随机数固定函数——seed
Reference:https://blog.csdn.net/weixin_41571493/article/details/80549833
import numpy as np
np.random.seed(0)
np.random.rand(4,3)
Out[362]:
array([[0.5488135 , 0.71518937, 0.60276338],
[0.54488318, 0.4236548 , 0.64589411],
[0.43758721, 0.891773 , 0.96366276],
[0.38344152, 0.79172504, 0.52889492]])
np.random.seed(0)
np.random.rand(4,3)
Out[364]:
array([[0.5488135 , 0.71518937, 0.60276338],
[0.54488318, 0.4236548 , 0.64589411],
[0.43758721, 0.891773 , 0.96366276],
[0.38344152, 0.79172504, 0.52889492]])
这个函数我测试过,在程序开头加入后,只要seed的参数不变,这个程序多次运行的随机数一致,注释后,随机数改变,再次加入后,只要参数不变,随机数结果依旧与之前的一致。
这里猜测这个seed其实本身就是随机数的种子,只要种子不变,指定函数产生的随机数就是固定的。
绘图相关问题总结
同时打开多个绘图窗口
https://blog.csdn.net/wonengguwozai/article/details/79686062
了解到plt还有两种模型,通过ion()和ioff()进行切换。只有在ion()模式下,程序才会继续运行,在ioff()下才能保留窗口持续显示。
import matplotlib.pyplot as plt
plt.ion() # 打开交互模式
# 同时打开两个窗口显示图片
plt.figure() #图片一
plt.imshow(i1)
plt.figure() #图片二
plt.imshow(i2)
# 显示前关掉交互模式
plt.ioff()
plt.show()