NumPy数组应用全解

本文介绍了NumPy库在Python中的使用,包括导入库、创建数组、执行算术运算、生成多维数组(如矩阵)以及访问元素。强调了NumPy在深度学习中的重要性,如数组的元素级运算和广播功能,并展示了如何进行矩阵运算。此外,还讲解了如何通过索引和布尔数组来访问和筛选数组元素。
摘要由CSDN通过智能技术生成

在深度学习的实现中,经常出现数组和矩阵的计算。NumPy的数组类(numpy.array)中提供了很多便捷的方法,在实现深度学习时,我们将使用这些方法。

1. 导入NumPy

NumPy是外部库。这里所说的“外部”是指不包含在标准Python中。因此,我们首先要导入NumPy库。

>>>import numpy as np

Python中使用import语句来导入库。这里的import numpy as np,直译的话就是“将numpy作为np导入”的意思。通过写成这样的形式,之后NumPy相关的方法均可通过np来调用。

2.生成NumPy数组

要生成NumPy数组,需要使用np.array()方法。np.array()接收Python列表作为参数,生成NumPy数组(numpy.ndarray)。

>>> x=np.array([1.0,2.0.3.0])
>>> print(x)
[1. 2. 3.]
>>> type(x)
<class 'numpy.ndarray'>

3.NumPy的算术运算

下面是NumPy数组的算术运算的例子。

>>> x=np.array([1.0,2.0,3.0])
>>> y=np.array([2.0,4.0,6.0])
>>> x+y #对应元素的加法
array([3., 6., 9.,])
>>> x-y
array([-1., -2., -3., ])
>>>x*y #element-wise product
array([ 2., 8., 18.])
>>> x/y
array([0.5,0.5,0.5])

这里需要注意的是,数组x和数组y的元素个数是相同的(两者均是个数为3 的一维数组)。当x和y的元素个数相同时,可以对各个元素进行算术运算。如果元素个数不同,程序就会报错,所以元素个数保持一致非常重要。另外,“对应元素”的 英文是element-wise,比如“对应元素的乘法”就是element-wise product。

 NumPy数组不仅可以进行element-wise运算,也可以和单一的数值(标量)组合起来进行运算。此时,需要在NumPy数组的各个元素和标量之间进行运算。这个功能也被称为广播。

>>> x=np.array([1.0,2.0,3.0])
>>>x/2.0
array[ 0.5, 1. , 1.5])

4.NumPy数组的N维数组

NumPy数组不仅可以生成一维数组(排成一列的数组),也可以生成多维数组。比如,可以生成如下的二维数组(矩阵)。

>>> A=np.array([[1, 2], [3,4]])
>>。 print(A)
[[1 2]
 [3 4]]
>>>A.shape
(2, 2)
>>> A.dtype
dtype('int64')

这里生成了一个2×2的矩阵A另外,矩阵A的形状可以通过shape查看,矩阵元素的数据类型可以通过dtype查看。下面,我们来看一下矩阵的算术运算。

>>> B=np.array([[3, 0],[0,6]])
>>> A+B
array([[4,2],[3,10]])
>>> A*B
array([[3, 0]
       [0, 24]])

和数组的算术运算一样,矩阵的算术运算也可以在相同形状的矩阵间以对应元素的方式进行。并且,也可以通过标量(单一数值)对矩阵进行算术运算。这也是基于广播的功能。

>>> print(A)
[[1 2]
 [3 4]]
>>>A*10
array([[10, 20]
       [30, 40]])

 Numpy数组(np.array)可以生成N维数组,即可以生成一维数组、二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化后的向量或矩阵等统称为张量(tensor)。

5.访问元素

元素的索引从0开始。对各个元素的访问可按如下方式进行。

>>> X=np.array([[51, 55],[14, 19],[0,4]])
>>> print(X)
[[51 55]
 [14 19]
 [0  4]]
>>> x[0]  #第0行
array([[51, 55])
>>> X[0][1] #(0,1)的元素
55

#也可以使用for语句访问各个元素
>>> for row in X:
...     print(row)
...
[51 55]
[14 19]
[0 4]

#除了前面介绍的索引操作,NumPy还可以使用数组访问各个元素。
>>> X=X.flatten()
#将X转换为一维数组
>>> print(X)
[51 55 14 19 0 4]
>>>X[np.array([0, 2, 4])] #获取索引为0、2、4的元素
array([51, 14, 0])

#运用这个标记法,可以获取满足一定条件的元素。例如,要从X中抽出大于15的元素可以写成如下形式。
>>> X>15
array([ True, True, Flase, True, Flase, Flase,],dtype=bool)
>>>X[X>15]
array([51, 55, 19])


 

对NumPy数组使用不等号运算符等(上例中是X>15),j结果会得到一个布尔型的数组。上例中就是使用这个布尔型数组取出了数组的各个元素(取出True对应的元素)。

参考《深度学习入门:基于Python的理论与实现》 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭小跳呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值