Python numpy库的应用、matplotlib绘图、opencv的应用
numpy
import numpy as npl1 = [1, 2, 3, 4, 5]# array():将列表同构成一个numpy的数组
l2 = np.array(l1)
print(type(l2))
print(l2)
# ndim : 返回数组的轴数(维度数)
# shape:返回数组的形状,用元组表示;元组的元素个数表示数组的轴数;元组元素值表示对应轴中数组的元素个数
# 元组的元素个数表示数组的轴数;元组元素值表示对应轴中数组的元素个数
# (第一轴长,第二轴长,第三轴长...)
print(l2.ndim, l2.shape)l2 = np.array([3, 4, 5])
print(l2)l2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(l2.ndim, l2.shape)
print(l2)l2 = np.array([[[1, 2, 1], [3, 4, 2]], [[5, 6, 3], [7, 8, 4]]])
print(l2.shape) # --> (2, 2, 2)# l3 = l2.reshape((2, 6)) # reshape() : 改变数组的形状
l3 = l2.reshape(2, 6)
print(l3)l4 = l2.reshape(1, 2, 2, 3)
print(l4)# arange(start, stop, step):产生某个范围数据的 一维数组 [start, stop, step)
l5 = np.arange(1, 11).reshape(5, 2) # 表示第一个括号有5个元素,第二个括号有2个元素
print(l5)l5 = np.arange(1, 11, 2)
print(l5)D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day5\numpyy.py
<class 'numpy.ndarray'>
[1 2 3 4 5]
1 (5,)
[3 4 5]
2 (3, 3)
[[1 2 3][4 5 6][7 8 9]]
(2, 2, 3)
[[1 2 1 3 4 2][5 6 3 7 8 4]]
[[[[1 2 1][3 4 2]][[5 6 3][7 8 4]]]]
[[ 1 2][ 3 4][ 5 6][ 7 8][ 9 10]]
[1 3 5 7 9]进程已结束,退出代码0
numpy 运算
import numpy as npA = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[7, 8], [9, 10], [11, 12]]).reshape(2, 3)C = A * B # a00 * b00, a01 * b01, a02 * b02
print(C)# numpy数组的运算实质是将 数组对应位置的元素进行运算
C = A - B
print(C)
C = A + B
print(C)
C = A / B
print(C)C = np.sum(A, axis=1) # 计算数组各行元素之和
print(C)
C = np.sum(A, axis=0) # 计算数组各列元素之和
print(C)print("---------------")
a = np.array([1, 2, 3, 4, 5]).reshape(5, 1)
b = np.array([6, 7, 8, 9, 10]).reshape(5, 1)
c = np.hstack((a, b)) # 水平方向合并
print(c)
c = np.vstack((a, b)) # 垂直方向合并
print(c)D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day5\numpy运算.py
[[ 7 16 27][40 55 72]]
[[-6 -6 -6][-6 -6 -6]]
[[ 8 10 12][14 16 18]]
[[0.14285714 0.25 0.33333333][0.4 0.45454545 0.5 ]]
[ 6 15]
[5 7 9]
---------------
[[ 1 6][ 2 7][ 3 8][ 4 9][ 5 10]]
[[ 1][ 2][ 3][ 4][ 5][ 6][ 7][ 8][ 9][10]]进程已结束,退出代码0
numpy 索引切片
import numpy as npa = np.array([1, 2, 3, 4, 5, 6])
print(a, a[2], a[2:5])b = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 0]])
# numpy的多维数组中,拥有多个轴,每个轴都有索引编号,从0开始
# 访问元素[第一轴索引,第二轴索引,第三轴索引...]
print(b, b[0, 2], b[1, 3])
print(b[1, 2:])
# 元素的索引可以进行切片处理[start:stop:step, start:stop:step...]
print(b[:, 1::2])
print("-----------")
c = np.arange(24).reshape(3, 2, 4)
print(c)
print(c[:, 0, 1:3])D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day5\numpy索引切片.py
[1 2 3 4 5 6] 3 [3 4 5]
[[1 2 3 4 5][6 7 8 9 0]] 3 9
[8 9 0]
[[2 4][7 9]]
-----------
[[[ 0 1 2 3][ 4 5 6 7]][[ 8 9 10 11][12 13 14 15]][[16 17 18 19][20 21 22 23]]]
[[ 1 2][ 9 10][17 18]]
matplotlib 绘图
import randomimport matplotlib.pyplot as plt
import numpy as np"""# 1.绘制直线
"""
x = np.array([1.2, 5.8, 9])
y = np.array([1.0, 8.5, 10])
# plot() : 绘制直线,参数x必须是两点的x轴坐标集, 参数y必须是两点的y轴坐标集
# 参数c表示线条的颜色
plt.plot(x, y, c='b', lw=2)
# show(): 显示绘图
plt.show()"""# 1.绘制散点(3, 3)
"""
# scatter() : 绘制散点
# 参数x:点的x坐标集 参数y:点的y坐标集 参数s:点的面积 参数c:点的颜色
# 参数marker:点的形状(o:原点,*:星形,^:三角形,s:矩形,d:菱形 )
# x = np.array([3])
# y = np.array([4])
# normal():正太分布函数 参数1:正态分布中心点 参数2:点的离散程度 参数3:产生的点的个数
# uniform():产生某个范围的点 参数1:start最小值 参数2:stop最大值 参数3:产生的点个个数
x = np.random.normal(0, 5, 1000)
y = np.random.uniform(0, 2, 1000)
# y = np.arange(1000)
plt.scatter(x[0:500], y[0:500], s=50, c='g', marker='*', linewidths=3)
plt.scatter(x[500:], y[500:], s=50, c='b', marker='o')
plt.show()"""# 2.绘制正弦线
"""
x = np.arange(0, 6, 0.001)
y = np.sin(x)
plt.plot(x, y)
plt.show()"""3.多子图绘制
"""
plt.subplot(221)
x = np.array([2, 4])
y = np.array([3, 8])
plt.plot(x, y)plt.subplot(222)
x = np.arange(0, 6, 0.01)
y = np.cos(x)
plt.plot(x, y)plt.subplot(223)
x = np.array([2, 4, 6])
y = np.array([8, 10, 12])
plt.scatter(x, y)plt.subplot(224)
x = np.array([0, 8, 9.8])
y = np.array([0, 8, 9.8])
plt.plot(x, y)
plt.show()"""4.绘制柱状图
"""
x_dat = ("jan", "feb", "mar", "apr", "may") # x刻度名
x_index = np.arange(len(x_dat)) # 刻度的索引
y1 = (20, 10, 15, 18, 25) # 收入数值,单位k
y2 = (8, 25, 13, 10, 12) # 支出数值,单位k
# bar:柱状图(索引位置、高度、宽度、颜色、透明度、图例名)
plt.bar(x_index, height=y1, width=0.4, color='g', alpha=0.4, label="revenue")
plt.bar(x_index + 0.4,height=y2, width=0.4, color='r', alpha=0.4, label="expense")
plt.legend() # 显示图例
plt.xticks(x_index + 0.2, x_dat)
plt.show()
opencv图像处理,以及人脸识别
import cv2"""1.加载本地图片并显示
"""
img = cv2.imread("1.png")
print(type(img))
print(img.shape)
# imshow(): 窗口显示 img图片
cv2.imshow("src", img)
# waitKey(n):阻塞等待按键按下,如果等待n时间内没有按键按下,则立即返回
# 如果有按键按下 则返回按下的按键的编码:默认为永久阻塞
if cv2.waitKey() == ord("q"):print("按下的按键为q")# destroyAllWindows() : 销毁窗口cv2.destroyAllWindows()"""2.图片的变换
"""
img = cv2.imread("1.png")
# cvtColor(): 图片变换的函数,参数1:原图数据 参数2:变换的方式 COLOR_BGRA2GRAY:灰色
gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
gray = cv2.resize(src=gray, dsize=(640, 480))
print(gray.shape) # 500, 281
# imwrite():将图片数据写入文件中
cv2.imwrite("g.png", gray)
cv2.imshow("gray", gray)
if cv2.waitKey() == ord("q"):cv2.destroyAllWindows()"""3.图片的截取 点(36宽,15高) 框架( 101宽,42高)
"""
img = cv2.imread("1.png")
# shape(500, 281, 3) 高、宽、3
image = img[15:15+42, 36:36+101, :]
cv2.imshow("src", image)
# waitKey(n):阻塞等待按键按下,如果等待n时间内没有按键按下,则立即返回
# 如果有按键按下 则返回按下的按键的编码:默认为永久阻塞
if cv2.waitKey() == ord("q"):print("按下的按键为q")# destroyAllWindows() : 销毁窗口cv2.destroyAllWindows()"""4.操作摄像头
"""
# 构造对象,打开摄像头 0
cap = cv2.VideoCapture(0)
if not cap.isOpened():print("摄像头打开失败")exit(-1)
while True:# read() :读取摄像头拍摄的一帧图片,返回ret读取的标志 和 image图片内容ret, img = cap.read()if len(img) == 0:print("没有图片信息,图片读取失败")cap.release()exit(-1)cv2.imshow("src", img)# waitKey 参数为毫秒if cv2.waitKey(1) == 27:break
# release():释放摄像头
cap.release()
cv2.destroyAllWindows()"""5.人脸检测
"""
path = "haarcascade_frontalface_default.xml"
# 加载人脸检测的模型,使用CascadeClassifier联级分类器
classifier = cv2.CascadeClassifier(path)
cap = cv2.VideoCapture(0)
if not cap.isOpened():print("摄像头打开失败")exit(-1)
while True:# read() :读取摄像头拍摄的一帧图片,返回ret读取的标志 和 image图片内容ret, img = cap.read()if len(img) == 0:print("没有图片信息,图片读取失败")cap.release()exit(-1)# 由于官方给定的模型需要灰度图,所以需要转换为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)# 使用分类器对灰度图片中的人脸进行检测# 图片中有几张人脸,二维数组就有几个元素# [[x, y, w, h], [x, y, w, h]]face = classifier.detectMultiScale(gray)if len(face) != 0:print(face)for f in face:x, y, w, h = f # 得到人脸的x, y, w, h# rectangle():绘制矩形 参数pt1:人脸左上角坐标轴 参数pt2:人脸右下角坐标值 参数thickness线条粗细, color边框颜色cv2.rectangle(img, pt1=(x, y), pt2=(x+w, y+h),thickness=1, color=(122, 100, 30))# circle(): 画圆cv2.circle(img, center=(x+w//2, y+h//2), radius=w//2, color=(100, 133, 200))cv2.imshow("src", img)# waitKey 参数为毫秒if cv2.waitKey(1) == 27:break
# release():释放摄像头
cap.release()
cv2.destroyAllWindows()
相关文章:

Python numpy库的应用、matplotlib绘图、opencv的应用
numpy import numpy as npl1 [1, 2, 3, 4, 5]# array():将列表同构成一个numpy的数组 l2 np.array(l1) print(type(l2)) print(l2) # ndim : 返回数组的轴数(维度数) # shape:返回数组的形状,用元组表示;元组的元素…...

SpringBoot 如何进行 统一异常处理
在Spring Boot中,可以通过自定义异常处理器来实现统一异常处理。异常处理器能够捕获应用程序中抛出的各种异常,并提供相应的错误处理和响应。 Spring Boot提供了ControllerAdvice注解,它可以将一个类标记为全局异常处理器。全局异常处理器能…...

数据库索引优化与查询优化——醍醐灌顶
索引优化与查询优化 哪些维度可以进行数据库调优 索引失效、没有充分利用到索引-一索引建立关联查询太多JOIN (设计缺陷或不得已的需求) --SQL优化服务器调优及各个参数设置 (缓冲、线程数等)–调整my.cnf数据过多–分库分表 关于数据库调优的知识点非常分散。不同的 DBMS&a…...
Student and Teacher network(学生—教师网络)与知识蒸馏
Student and Teacher network指一个较小且较简单的模型(学生)被训练来模仿一个较大且较复杂的模型(教师)的行为或预测。教师网络通常是一个经过训练在大型数据集上并在特定任务上表现良好的模型。而学生网络被设计成计算效率高且参…...
FPGA——PLD的区别以及各自的特点
目录 一、概述二、PLD的优点三、PLD的分类1、PROM(可编程只读存储器):2、PAL(可编程阵列逻辑)3、GAL(通用阵列逻辑)4、CPLD (复杂PLD)5、FPGA(现场可编程门阵…...

八、Kafka时间轮与常见问题
Kafka与时间轮 Kafka中存在大量的延时操作。 1、发送消息-超时重试机制 2、ACKS 用于指定分区中必须要有多少副本收到这条消息,生产者才认为写入成功(延时 等) Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而…...

Web端即时通讯技术(SEE,webSocket)
目录 背景简介个人见解被动推送轮询简介实现 长轮询(comet)简介实现 比较 主动推送长连接(SSE)简介实现GETPOST 效果 webSocket简介WebSocket的工作原理:WebSocket的主要优点:WebSocket的主要缺点: 实现用法一用法二 **效果** 比较…...

脑电信号处理与特征提取——4.脑电信号的预处理及数据分析要点(彭微微)
目录 四、脑电信号的预处理及数据分析要点 4.1 脑电基础知识回顾 4.2 伪迹 4.3 EEG预处理 4.3.1 滤波 4.3.2 重参考 4.3.3 分段和基线校正 4.3.4 坏段剔除 4.3.5 坏导剔除/插值 4.3.6 独立成分分析ICA 4.4 事件相关电位(ERPs) 4.4.1 如何获…...

分析npm run serve之后发生了什么?
首先需要明白的是,当你在终端去运行 npm run ****,会是什么过程。 根据上图的一个流程,就可以衍生出很多问题。 1,为什么不直接运行vue-cli-service serve? 因为直接运行 vue-cli-service serve,会报错,…...
LINUX上操作redis 用shell7
LINUX上操作redis 用shell7 步骤1:连接到Linux服务器步骤2:安装和配置Redis步骤3:连接到Redis服务器步骤4:操作Redis数据步骤5:断开与Redis服务器的连接 步骤1:连接到Linux服务器 首先,需要使用…...

Python的threading模块
为引入多线程的概念,下面是一个例子: import time, datetimestartTime datetime.datetime(2024, 1, 1, 0, 0, 0) while datetime.datetime.now() < startTime:time.sleep(1)print(Program now starting on NewYear2024) 在等待time.sleep()的循环调…...
HTML5 的离线储存怎么使用,工作原理
TML5提供了一种称为离线储存(Offline Storage)的功能,它允许网页在离线时缓存和存储数据,以便用户可以在没有网络连接的情况下访问这些数据。离线储存是通过使用Web Storage API或者应用程序缓存(Application Cache&am…...
FTP文件传输协议与DHCP
基本概念 主机之间传输文件是IP网络的一个重要功能 互联网早期,最通用方式就是使用FTP(File Transfer Protocol,文件传输协议)以及(Trivial File Transfer Protocol,简单文件传输协议) FTP采用…...

【UE5 多人联机教程】06-显示玩家名称
效果 可以看到玩家输入各自的名称,会显示到自己控制的角色头上。但是目前有一个BUG就是,当客户端加入游戏时会多创建一个服务端的角色。 步骤 1. 打开“BP_ThirdPersonCharacter”,添加一个控件组件,用于显示玩家名称 作为网格体…...

Rust vs Go:常用语法对比(五)
题图来自 Rust vs Go 2023[1] 81. Round floating point number to integer Declare integer y and initialize it with the rounded value of floating point number x . Ties (when the fractional part of x is exactly .5) must be rounded up (to positive infinity). 按规…...
Flutter 扩展函数项目实用之封装SizedBox
Flutter里扩展函数可以用简化代码写法,关键字为extension,伪代码写法如下: extension 扩展类名 on 扩展类型 { //扩展方法 } 在Flutter页面里实现控件间距会常用到SizedBox,可使用扩展函数封装来达到简化代码的目的࿰…...

EMC学习笔记(二十)EMC常用元件简单介绍(二)
EMC常用元件简单介绍(二) 1.瞬态抑制二极管(TVS)2.气体放电管3.半导体放电管 电磁兼容性元件是解决电磁干扰发射和电磁敏感度问题的关键,正确选择和使用这些元件是做好电磁兼容性设计的前提。由于每一种电子元件都有它各自的特性,…...

基本排序算法
目录 一,插入排序 二,希尔排序 三,选择排序 四,冒泡排序 五,快排 5.1 Hoare法 5.2 挖坑法 5.3 指针法 5.4 非递归写法 六,归并排序 6.1 递归 6.2 非递归 一,插入排序 基本思想&…...

python调用百度ai将图片/pdf识别为表格excel
python调用百度ai将图片识别为表格excel 表格文字识别(异步接口)图片转excel 表格文字识别V2图片/pdf转excel通用 表格文字识别(异步接口) 图片转excel 百度ai官方文档:https://ai.baidu.com/ai-doc/OCR/Ik3h7y238 使用的是表格文字识别(异步接口),同步…...
Ansible最佳实践之Playbook管理滚动更新
写在前面 理解不足小伙伴帮忙指正 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法
使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...