Numpy是Python重要的基础,与TensorFlow关系密切。因此学好这部分是深度学习的基础。本节介绍如何生成ndarray,以及元素的读取和矩阵操作。
Numpy提供了两种基本对象,分别是ndarray
(存储单一数据类型的多维数字)和ufunc
(对数组进行处理),
生成ndarray的方法
ndarray是一个多维数组对象,封装了许多常用的数学运算函数。
从已有的数据中生成
从python的基础数据类型转换成ndarry
import numpy as np
list1 = [3.14,5.14,3,1,5]
nd1 = np.array(list1)
print(nd1)
#nd1的类型
print(type(nd1))
运行结果:
[3.14 5.14 3. 1. 5. ]
random模块生成ndarray
random模块下也有许多函数:
- random函数生成0到1随机数
- uniform生成均匀分布随机数
- randn生成标准正态随机数
- normal生成正太分布
- shuffle随机打乱顺序
- seed设置随机种子
- 其他
import numpy as np
#生成3X3的0~1随机数
nd1 = np.random.random([3,3])
print(nd1)
#nd1的类型
print(type(nd1))
运行结果:
[[0.62140536 0.47813759 0.10530908]
[0.59137417 0.9946449 0.88554677]
[0.70554681 0.69281835 0.52155679]]
特定形状的多维数组
- np.ones() 全是1的3X3矩阵
- np.zeros([3,3]) 全是0的3X3矩阵
- np.eye(3) 三阶单位举证
- np.diag([1,2,3]) 生成对角矩阵,左上到右下为1、2、3
- 其他
arange函数
arange([start,]stop[,step,],dtype=None)
- start:起始值,默认为0
- stop:终止值
- step:步长,正数为增长,负数为减小
生成的结果为ndarray
读取元素
直接上一段代码,可以清楚地了解到如何读取。需要注意的是,nd11[3:6]
是左闭右开的,左边的在其中,右边的不在内,[3:6]就是0,1,2,3,4,5,6,7...中的3,4,5
import numpy as np#
np.random.seed(2022) #时间种子,每次运行产生的随机数不一样
nd11 = np.random.random([10])
# 产生十个0~1的随机小数
print("nd11 = ", nd11)
#获取指定位置的数据,获取第4个元素
nd11[3] #0,1,2,3 所以第4个
print("nd11[3] = ", nd11[3])
#截取一段数据,第四个到第六个,默认位置上的等差数列为1
nd11[3:6]
print("nd11[3:6] = ", nd11[3:6])
#截取固定间隔数据,间隔为2
nd11[1:6:2]
print("nd11[1:6:2] = ", nd11[1:6:2])
#倒序取数,间隔为2
nd11[::-2]
print("nd11[::-2] = ", nd11[::-2])
#截取一个多维数组的一个区域内数据
nd12=np.arange(25).reshape([5,5]) #5X5的二维矩阵
print("nd12 = ",nd12)
nd12[1:3,1:3]
print("nd12[1:3,1:3] = ", nd12[1:3,1:3])
#截取一个多维数组中,数值在一个值域之内的数据
nd12[(nd12>3)&(nd12<10)]
print("nd12[(nd12>3)&(nd12<10)]= ", nd12[(nd12>3)&(nd12<10)])
#截取多维数组中,指定的行,如读取第2,3行
nd12[[1,2]] #或nd12[1:3,:]
print("nd12[[1,2]] = ", nd12[[1,2]])
##截取多维数组中,指定的列,如读取第2,3列
nd12[:,1:3]
print("nd12[:,1:3] = ", nd12[:,1:3])
运行结果:
nd11 = [0.00935861 0.49905781 0.11338369 0.04997402 0.68540759 0.48698807
0.89765723 0.64745207 0.89696312 0.72113493]
nd11[3] = 0.049974018177630475
nd11[3:6] = [0.04997402 0.68540759 0.48698807]
nd11[1:6:2] = [0.49905781 0.04997402 0.48698807]
nd11[::-2] = [0.72113493 0.64745207 0.48698807 0.04997402 0.49905781]
nd12 = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
nd12[1:3,1:3] = [[ 6 7]
[11 12]]
nd12[(nd12>3)&(nd12<10)]= [4 5 6 7 8 9]
nd12[[1,2]] = [[ 5 6 7 8 9]
[10 11 12 13 14]]
nd12[:,1:3] = [[ 1 2]
[ 6 7]
[11 12]
[16 17]
[21 22]]
还可以通过random.choice函数从指定的样本中进行随机抽取。
如:
c1= np.random.choice(a, size=(3,4)[,replace=True/Falese])
replace默认是True,表示可以随机重复抽取,改为False之后就是随机但不重复去抽取里面的数据。
具体的用法可以去网上找找。
矩阵操作
numpy.linalg模块中的函数是满足行业标准级的Fortran库。
import numpy as np
nd14=np.arange(9).reshape([3,3])
## 矩阵转置
np.transpose(nd14)
#矩阵乘法运算
a=np.arange(12).reshape([3,4])
b=np.arange(8).reshape([4,2])
a.dot(b)
#求矩阵的迹
a.trace()
#计算矩阵行列式
np.linalg.det(nd14)
#计算逆矩阵
c=np.random.random([3,3])
np.linalg.solve(c,np.eye(3))
声明:内容来源于吴茂贵老师主编的学习教材《Python深度学习——基于TensorFlow》,本文仅供学习参考,并加入了博主自己的一些理解和操作,并非原汁原味,为了更好的阅读体验和系统性地学习,请购买正版读物进行学习。