目录
- 引言
- 创建数组
- 获取数组信息
- 获取数组内指定位置的元素
引言
NumPy库是Python中用于科学计算的核心库。它提供了一个高性能多维数组对象,以及使用和处理这些数组的工具。
Numpy是每一位学习python的小伙伴的必修课,因为它真的真的太实用了。
举几个例子:
- 我们在线性代数中学习的向量就是一维数组,矩阵就是二维数组,而Numpy就是专业来处理数组的,因此我们可以使用Numpy进行向量和矩阵的运算。
- 图片本质上都可以用数组来表示,黑白图就是一个矩阵(矩阵元素值就是像素值),而彩色图则是三维数组,因为其包含了RGB三个颜色通道,每一个颜色通道是一个矩阵,因此由3个矩阵组合成三维数组,所以咱们可以用Numpy对图片进行大刀阔斧地修改。
…
总之,任何可以用数组来表示的事物,都可以使用Numpy来进行花式操作。
本文旨在向读者介绍Numpy的基础知识,包括使用Numpy:
- 创建数组
- 获取数组的信息(如形状、维数等)
- 获取数组内指定位置的元素
- 数组的基本数学运算
- 数组变换
本文将会对介绍的每一个Numpy函数进行代码演示,从而能够帮助读者快速掌握该函数的使用。
为了控制篇幅,本文首先介绍前3条,即:使用Numpy创建数组、获取数组信息、获取数组内指定位置的元素。
Let’s get started !
import numpy as np
创建数组
np.array()
- 一维数组 - 向量
array = np.array([1,2,3])
print (array)
>>> [1 2 3]
- 二维数组 - 矩阵
array = np.array([[1,2],[3,4]])
print (array)
>>>
[[1 2]
[3 4]]
- 高维数组
array = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print (array)
>>>
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
可以看到,如果数组比较庞大,上述的创建方法比较麻烦,Numpy提供了一些更为便捷的函数,来创建任意形状的数组:np.ones()
#元素全为1的数组
array = np.ones((2,3,4)) #(2,3,4)即为指定的形状
print (array)
>>>
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
np.zeros()
#元素全为0的数组
array = np.ones((3,4))
print (array)
>>>
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
np.full()
#元素全为指定常数的数组
array = np.full((2,2),7) #2x2元素值均为7的数组
print (array)
>>>
[[7 7]
[7 7]]
np.eye()
#单位矩阵
array = np.eye(3) #3x3的单位矩阵
print (array)
>>>
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
np.random.random()
np.random.randint()
#[0.0, 1.0)随机浮点数组成指定形状的数组
array =np.random.random((2,2)) #2x2元素值随机生成的矩阵
print (array)
>>>
[[0.24160008 0.41509019]
[0.01271793 0.15656877]]
#[low,high)随机整数组成指定形状的数组
array = np.random.randint(0,10,(3,3))#low = 0,high = 10
print (array)
>>>
[[5 6 3]
[1 4 5]
[1 9 7]]
除此之外,Numpy还提供了创建等间隔一维数组的函数,也非常实用:np.arange()
#从10开始,每间隔5,到25为止的元素组成的数组
array =np.arange(10,25,5)
print (array)
>>>[10 15 20]
#默认从0开始,默认每间隔1,到10为止的元素组成的数组
array =np.arange(10)
print (array)
>>>[0 1 2 3 4 5 6 7 8 9]
np.linspace()
#从0到2之间等间隔取10个数字组成的数组
array =np.linspace(0,2,10)
print (array)
>>>
[0. 0.22222222 0.44444444 0.66666667 0.88888889
1.11111111 1.33333333 1.55555556 1.77777778 2.]
OK,看到这里,大家应该能够快速创建一个任意形状的数组了。
获取数组信息
我们首先自行创建一个数组:
array = np.random.randint(0,10,(2,3,4))
print (array)
>>>
[[[9 3 3 0]
[1 4 7 1]
[2 1 4 0]]
[[5 6 2 6]
[1 4 5 8]
[1 9 7 7]]]
- 获取数组形状
array.shape
>>>(2, 3, 4)
- 获取数组维数
array.ndim
>>>3
- 获取数组元素个数
array.size
>>>24
- 获取数组元素的数据类型
array.dtype
>>>dtype('int32')
获取数组内指定位置的元素
我们首先自行创建一个数组:
array = np.random.randint(0,10,(2,3,4))
print (array)
>>>
[[[5 0 3 1]
[6 1 4 8]
[4 7 9 8]]
[[3 5 9 7]
[5 0 9 6]
[9 0 6 4]]]
- 获取单一元素
左图中的元素4:第 2 个矩阵第 3 行第 4 列
右图中的元素7:第 1 个矩阵第 3 行第 2 列
代码如下:
array[1,2,3]
>>>4
#或者
array[1,-1,-1] #-1表示倒数第1
>>>4
array[0,2,1]
>>>7
注:python中的下标是从0开始的,所以,第 2 个矩阵第 3 行第 4 列对应的下标分别是 1,2,3。
- 获取某一行或某一列
左图:第 2 个矩阵 第 2 列
右图:第 1 个矩阵 第 2 行
代码如下:
array[1,:,1]
>>>array([5, 0, 0])
array[0,1,:]
>>>array([6, 1, 4, 8])
注:这里的冒号表示取所有元素。
- 获取某几行或某几列
左图:第 2 个矩阵 第2-4列
右图:第 1 个矩阵 第1-2行
代码如下:
array[1,:,1:4] #1:4 不会取到4,即1,2,3。
>>>
array([[5, 9, 7],
[0, 9, 6],
[0, 6, 4]])
array[0,:2,:] #:2即0:2
>>>
array([[5, 0, 3, 1],
[6, 1, 4, 8]])
- 获取满足指定条件的元素
#获取数组中值小于5的元素
array[array<5]
>>> array([0, 3, 1, 1, 4, 4, 3, 0, 0, 4])
#获取数组中值大于1且小于5的元素
array[(array>1) & (array<5)]
>>> array([3, 4, 4, 3, 4])
#获取数组中值小于3或大于5的元素
array[(array<3) | (array>5)]
>>>array([0, 1, 6, 1, 8, 7, 9, 8, 9, 7, 0, 9, 6, 9, 0, 6])
到这里,相信读者可以从任意数组中提取任意位置的元素了。
未完待续 。。。