目录

  • 引言
  • 创建数组
  • 获取数组信息
  • 获取数组内指定位置的元素

引言

NumPy库是Python中用于科学计算的核心库。它提供了一个高性能多维数组对象,以及使用和处理这些数组的工具。

Numpy是每一位学习python的小伙伴的必修课,因为它真的真的太实用了。

举几个例子:

  1. 我们在线性代数中学习的向量就是一维数组,矩阵就是二维数组,而Numpy就是专业来处理数组的,因此我们可以使用Numpy进行向量和矩阵的运算。
  2. 图片本质上都可以用数组来表示,黑白图就是一个矩阵(矩阵元素值就是像素值),而彩色图则是三维数组,因为其包含了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]]]
  • 获取单一元素

pytorch将numpy显示为图像 numpy处理图像_指定位置

pytorch将numpy显示为图像 numpy处理图像_pytorch将numpy显示为图像_02



  • 左图中的元素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。

  • 获取某一行或某一列

pytorch将numpy显示为图像 numpy处理图像_数组_03

pytorch将numpy显示为图像 numpy处理图像_数组_04



  • 左图:第 2 个矩阵 第 2 列
    右图:第 1 个矩阵 第 2 行

代码如下:

array[1,:,1]
>>>array([5, 0, 0])

array[0,1,:]
>>>array([6, 1, 4, 8])

注:这里的冒号表示取所有元素。

  • 获取某几行或某几列

pytorch将numpy显示为图像 numpy处理图像_数组_05

pytorch将numpy显示为图像 numpy处理图像_指定位置_06



  • 左图:第 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])

到这里,相信读者可以从任意数组中提取任意位置的元素了。

未完待续 。。。