提示:以下为学习笔记,供参考,后续会根据学习情况进行更新
目录
前言
NumPy在Python的数据计算,图像处理中有着重大作用,那么NumPy是什么?
一、NumPy是什么?
NumPy取自Numeriacal Python,在Python中它被广泛用于科学计算和工程领域。
NumPy库能提供多维数组对象(如数组、矩阵),以及快速对数组、矩阵进行的各种操作,例如数学计算,逻辑判断,形状处理,排序,选择,I/O,离散傅里叶变换,线性代数,基本数据统计等。
二、使用步骤
1.安装库
在Windows 命令行运行窗口使用pip命令进行安装
pip install numpy
2.导入库
代码如下(示例):
import numpy as np
3.创建数组
代码如下(示例):
# 可以使用np.zeros(), np.ones(), np.empty(), np.arange(), np.linspace()创建数组
a = np.zeros(2) # a 的内容是 [0. 0.]
a = np.ones(2) # a 的内容是 [1. 1.]
a = np.empty(2) # a 的内容是 [0. 0.]
a = np.arange(2, 5, 1.5) # a 的内容是 [2. 3.5]
a = np.linspace(1, 10, num = 5) # a 的内容是 [1. 3.25 5.5 7.75 10.]
4.数组属性
使用ndim, shape ,size,以及dtype可以获得数组对应的属性。
数组的维数:ndim;数组的形状:shape;数组包含的元素数量:size;数组元素的数据类型:dtype.
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(a.ndim) #结果为 2
print(a.dtype) #结果为 int32
print(a.shape) #结果为 (3, 4)
print(a.size) #结果为 12
三、思考
如何连接数组?np.concatenate((arry1,arry2))
如何对数组进行运算?
如何改变数组的形状,大小?array.reshape((m,n))
如何改变数组的数据类型? array.astype(np.uint8)
四、作业
创建一个可以表达如下图片的数组
提示 line1 = ([0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0])
黑色的像素用0表示,白色的用255表示,则上图可以用一个二维数组来表示。所以选哟想办法生成一个符合要求的二维数组。
作业解法如下,欢迎网友提供、指导更便捷的解法,谢谢!
作业解法1:
通过循环形成1维数组,再进行数组形态变化形成二维数组
# 先创建两个基本1维数组
a = ([0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0])
b = ([255,255,255,255,255,255,0,0,0,0,0,0,255,255,255,255,255,255])
# 再通过循环,依次将创建的两个基本数组首位连接起来
c1=([])
for i in range(6):
c1 = np.concatenate((c1,a))
for i in range(6):
c1 = np.concatenate((c1,b))
for i in range(6):
c1 = np.concatenate((c1,a))
#强制将元素类型转换维无符号8位整型
c2 = c1.astype(np.uint8)
#改变拼接的数组形状,形成一张图
c3 = c2.reshape((18,18))
#为了验证,导入matplotlib库来进行图形显示
import matplotlib.pyplot as plt
plt.imshow(c3,'gray')
作业解法2:
取消for循环,主要运用数组的运算来实现
# 创建 0, 1元素的一维数组
aa = np.zeros(6, dtype=np.uint8)
bb = np.ones(6, dtype = np.uint8)
#按照图片的规律连接成两组新的数组
cc = np.concatenate((aa,bb,aa))
kk = np.concatenate((bb,aa,bb))
#对两组数组进行形态变化并相互进行运算
gg=cc*(np.reshape(kk,(18,1)))+kk*(np.reshape(cc,(18,1)))
#打印数组
print(gg)
打印出数组gg,显示数据的效果如下,
# 数组与255相乘,将其转化为需要的二维数组
print(255*gg)
注释掉解法1和解法2图形显示和数据打印的部分,计算运行所需要的时间,
解法1是 37.9 µs ± 176 ns
解法2是9.7 µs ± 170 ns
使用数组直接进行计算相比使用For循环进行操作所需要花费的时间少很多,更方便、快捷。看来这就是使用NumPy的意义。期待继续的了解与学习!
五、学习资料
NumPy参考如下链接。