PyQt5、NumPy、Pandas 及 ModelArts 综合笔记
PyQt5、NumPy、Pandas 及 ModelArts 综合笔记
PyQt5 GUI 开发
信号与槽
-
概念:对象间解耦通信机制。
- 信号:对象状态改变时发射,例如
btn.clicked
。 - 槽:接收信号的普通函数或方法。
- 信号:对象状态改变时发射,例如
-
连接:
signal.connect(slot)
,断开:signal.disconnect(slot)
。 -
示例:
# 内置信号→内置槽 btn.clicked.connect(self.close)# 内置信号→自定义槽 btn.clicked.connect(self.on_click) def on_click(self):print("按钮被点击")# 自定义信号 class MyWidget(QWidget):my_signal = pyqtSignal()def __init__(self):super().__init__()self.my_signal.connect(self.handle_signal)def emit_signal(self):self.my_signal.emit()def handle_signal(self):print("自定义信号接收")
事件处理
-
主循环:
app.exec_()
启动事件循环,监听并分发事件。 -
重写事件处理:
-
paintEvent(event)
:绘制时调用。 -
closeEvent(event)
:关闭窗口时调用。def closeEvent(self, event):reply = QMessageBox.question(self, '确认退出', '确定要退出吗?',QMessageBox.Yes | QMessageBox.No, QMessageBox.No)if reply == QMessageBox.Yes:event.accept()else:event.ignore()
-
mousePressEvent(event)
、mouseMoveEvent(event)
、mouseReleaseEvent(event)
、wheelEvent(event)
。 -
keyPressEvent(event)
:键盘按下。
-
高级控件
- 表格与列表:
QTableWidget
、QTableView
+ 模型;QListWidget
、QListView
+ 模型。 - 树形结构:
QTreeWidget
、QTreeView
+QStandardItemModel
。 - 容器:
QTabWidget
、QStackedWidget
、QDockWidget
、QScrollArea
。 - 特殊控件:
QCalendarWidget
、QSlider
、QProgressBar
、QSpinBox
、QComboBox
。
拼图 游戏实现
- 窗口与布局:
QMainWindow
+QGridLayout
。 - 图像分割:将原图切为 3×3 片,保留一个空白块。
- 随机排列:打乱各块顺序,并生成相应
QLabel
或自定义控件。 - 鼠标交互:重写
mousePressEvent
检测点击块,判断与空白块相邻则交换位置。 - 胜利检测:每次交换后比较当前顺序与目标顺序。
- 界面更新:调用
update()
或动态调整控件布局。
NumPy 矩阵与数值计算
简介与安装
- 简介:高性能多维数组计算库。
- 安装:
pip install numpy
- 导入:
import numpy as np
- 版本:
np.__version__
ndarray
基础
-
创建:
a = np.array([1,2,3]) b = np.zeros((2,3)) c = np.ones((3,)) d = np.arange(0,10,2) e = np.linspace(0,1,5)
-
属性:
ndim
,shape
,size
,dtype
,itemsize
-
重塑:
a.reshape(new_shape)
或a.shape = new_shape
索引与切片
- 一维:
a[i]
,a[start:stop:step]
,a[::-1]
- 多维:
a[row, col]
,a[start:stop, start:stop]
,a[..., idx]
- 花式索引:
a[[1,3,5]]
- 布尔索引:
a[a > 5]
广播机制
-
规则:
- 维度对齐:在小数组前补 1。
- 同维度长度相同或有一方为 1。
- 视为兼容后广播。
-
示例:
a = np.array([[1,2,3],[4,5,6]]) # (2,3) b = np.array([1,0,1]) # (3,) c = a + b # b 广播为 (2,3)
通用函数(ufunc)
- 逐元素运算:
np.add
,np.sin
,np.exp
,np.logical_and
等。 - 运算符:
+
,-
,*
,/
,**
,%
常用函数
- 随机:
np.random.rand()
,randn()
,randint()
,seed()
,shuffle()
- 聚合:
np.sum()
,mean()
,std()
,min()
,max()
,argmax()
- 排序:
np.sort(a)
,np.argsort(a)
Pandas 数据分析
简介与数据结构
- 简介:高效的标签化数据处理库。
- 数据结构:
Series
:一维带索引。DataFrame
:二维表格结构,可存储不同类型。
- 安装:
pip install pandas
- 导入:
import pandas as pd
创建 Series 与 DataFrame
-
Series:
s = pd.Series([1,2,3], index=['a','b','c'], name='示例')
-
DataFrame:
df = pd.DataFrame({'A':[1,2],'B':[3,4] }, index=['row1','row2'])
查看数据
df.head()
,df.tail()
df.info()
,df.describe()
df.shape
,df.dtypes
,df.columns
,df.index
选择与索引
- 列:
df['col']
,df[['col1','col2']]
- 行:
df.loc[label]
,df.iloc[pos]
, 切片 - 组合:
df.loc[row, col]
- 布尔索引:
df[df['A'] > 0]
- 快速访问:
df.at['row','A']
,df.iat[0,0]
缺失值处理
- 检测:
df.isna()
,df.isnull()
- 删除:
df.dropna(axis=0, how='any')
- 填充:
df.fillna(method='ffill', limit=2)
数据操作
- 赋值:
df['C'] = np.arange(len(df))
- 合并:
pd.concat([df1, df2])
- 连接:
pd.merge(df1, df2, on='key', how='inner')
- 分组:
df.groupby('A').sum()
数据清洗摘要
方法 | 功能说明 |
---|---|
dropna() | 删除含 NaN 的行或列 |
fillna() | 填充 NaN 值 |
drop_duplicates() | 删除重复行 |
replace() | 替换指定值 |
华为云 ModelArts 平台
概览
- 一站式 AI 开发平台,涵盖标注、训练、部署全流程。
自动学习流程
- 创建项目:选择场景(图像分类/目标检测/预测分析)。
- 数据标注:从 OBS 上传/同步并标注。
- 模型训练:配置训练参数、计算规格、提交任务。
- 部署服务:在线服务发布,上传示例数据测试。
图像分类
- 至少 2 个类别,每类 ≥5 张图片。
- 流程:数据→训练→部署→测试。
目标检测
- 使用矩形框标注。
- 订阅预置算法(如 Faster R-CNN)。
预测分析
- 上传 CSV,选择目标列,训练并部署 JSON 接口。
数据管理
- 创建、版本化数据集(图像、表格)。
- 使用 OBS Browser+ 上传、标注。
- 发布版本供训练使用。
预置算法
- 在 AI Gallery 订阅 ResNet、Faster R-CNN 等。
- 创建训练作业并部署 AI 应用。