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. ]
<class 'numpy.ndarray'>

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]]
<class 'numpy.ndarray'>

特定形状的多维数组

  • 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库。

numpy.linalg中常用函数

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》,本文仅供学习参考,并加入了博主自己的一些理解和操作,并非原汁原味,为了更好的阅读体验和系统性地学习,请购买正版读物进行学习。


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/DLNumpy1.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 04 月 29 日
如果觉得我的文章对你有用,请随意赞赏