当前位置: 首页 > news >正文

学习嵌入式AI(TInyML),只需掌握这点python基础即可!

大家好,我是贺老师,嵌入式 AI 工程师,《嵌入式AI:让单片机学会思考》主理人,专注AI在MCU上的落地实践。

本文中,重点关注学习嵌入式AI需要掌握的Python编程语言的基础知识,包括基本语法、NumPy库的使用以及数据处理的基本概念。这些知识对于后续学习TinyML至关重要。

Python是机器学习领域最流行的编程语言,而NumPy是Python科学计算的核心库。掌握这些基础知识将帮助我们更好地理解和实现TinyML模型。

Python语法基础

变量和数据类型

Python是一种动态类型语言,变量不需要显式声明类型。

# 基本数据类型示例 # 整数 age = 15 # 浮点数 height = 1.75 # 字符串 name = "小明" # 布尔值 is_student = True # 列表 fruits = ["苹果", "香蕉", "橙子"] # 字典 student = {"name": "小红", "age": 14, "grade": 8}

控制结构

Python使用缩进来定义代码块,而不是大括号

# 条件语句示例 score = 85 if score >= 90: print("优秀") elif score >= 80: print("良好") elif score >= 70: print("中等") else: print("需要努力") # 循环语句示例 # for循环 for i in range(5): print(f"这是第{i+1}次循环") # while循环 count = 0 while count < 3: print(f"计数: {count}") count += 1

函数定义

函数是组织代码的重要方式,可以提高代码的可读性和复用性。

# 函数定义示例 def greet(name): """这是一个简单的问候函数""" return f"你好, {name}!" def calculate_area(length, width): """计算矩形面积""" area = length * width return area # 调用函数 message = greet("李华") print(message) rectangle_area = calculate_area(5, 3) print(f"矩形面积: {rectangle_area}")

NumPy基础

什么是NumPy?

NumPy是Python的一个开源数值计算库,提供了强大的多维数组对象和用于处理这些数组的函数。

在TinyML中,NumPy常用于:

  • 数据预处理和特征工程

  • 实现数学运算和线性代数操作

  • 与机器学习框架(如TensorFlow Lite)交互

NumPy数组

NumPy的核心是ndarray(N维数组)对象。

import numpy as np # 创建数组 arr1 = np.array([1, 2, 3, 4, 5]) # 一维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组 print("一维数组:", arr1) print("二维数组:") print(arr2) print("数组形状:", arr2.shape) print("数组维度:", arr2.ndim) print("数据类型:", arr2.dtype)

数组操作

NumPy提供了丰富的数组操作函数

# 数组运算 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) print("a + b =", a + b) # 元素相加 print("a * b =", a * b) # 元素相乘 print("a.dot(b) =", a.dot(b)) # 点积 # 常用函数 arr = np.array([1, 2, 3, 4, 5]) print("最大值:", np.max(arr)) print("最小值:", np.min(arr)) print("平均值:", np.mean(arr)) print("标准差:", np.std(arr)) print("总和:", np.sum(arr)) # 重塑数组 arr_reshape = arr.reshape(5, 1) print("重塑后的数组:") print(arr_reshape)

NumPy常用函数速查表

函数

描述

示例

np.array()

创建数组

np.array([1, 2, 3])

np.zeros()

创建全零数组

np.zeros((3, 3))

np.ones()

创建全一数组

np.ones((2, 4))

np.arange()

创建等差数组

np.arange(0, 10, 2)

np.reshape()

改变数组形状

arr.reshape(2, 3)

np.concatenate()

连接数组

np.concatenate((a, b))

np.sum()

计算数组元素和

np.sum(arr)

np.mean()

计算数组平均值

np.mean(arr)

np.std()

计算数组标准差

np.std(arr)

数据处理基础

数据加载与查看

在TinyML项目中,我们通常需要从各种来源加载数据。

import numpy as np # 创建示例数据集 # 假设我们有一个包含学生成绩的数据集 # 列: [数学成绩, 语文成绩, 英语成绩, 总分] data = np.array([ [85, 90, 88, 263], [92, 87, 95, 274], [78, 85, 80, 243], [65, 70, 75, 210], [95, 92, 98, 285] ]) print("数据集:") print(data) print("数据集形状:", data.shape) print("前3行数据:") print(data[:3]) print("数学成绩列:") print(data[:, 0])

数据清洗

数据清洗是数据处理的重要步骤,包括处理缺失值、异常值等

# 处理缺失值示例 # 假设我们的数据中有一些缺失值(用NaN表示) data_with_nan = np.array([ [85, 90, 88, 263], [92, np.nan, 95, np.nan], [78, 85, 80, 243], [np.nan, 70, 75, 210], [95, 92, 98, 285] ]) print("包含缺失值的数据:") print(data_with_nan) # 检查缺失值 print("缺失值位置:") print(np.isnan(data_with_nan)) # 填充缺失值(使用列平均值) col_mean = np.nanmean(data_with_nan, axis=0) print("列平均值:", col_mean) # 用列平均值填充缺失值 for i in range(data_with_nan.shape[1]): data_with_nan[np.isnan(data_with_nan[:, i]), i] = col_mean[i] print("填充后的数据:") print(data_with_nan)

数据标准化

数据标准化是将数据按比例缩放,使之落入一个小的特定区间。

# 数据标准化示例 # 使用之前的学生成绩数据 scores = data[:, :3] # 只取前三列(数学、语文、英语成绩) print("原始成绩数据:") print(scores) # 最小-最大标准化 min_vals = np.min(scores, axis=0) max_vals = np.max(scores, axis=0) normalized_scores = (scores - min_vals) / (max_vals - min_vals) print("最小-最大标准化后的数据:") print(normalized_scores) # Z-score标准化 mean_vals = np.mean(scores, axis=0) std_vals = np.std(scores, axis=0) z_scores = (scores - mean_vals) / std_vals print("Z-score标准化后的数据:") print(z_scores)

因平台推荐规则变化,多点赞和在看,我们才能常出现在你的推送里。

http://www.jsqmd.com/news/755246/

相关文章:

  • AI赋能终端:posh_codex实现自然语言命令行交互与自动化
  • RK3588平台IMX577 HDR调试实战:从寄存器配置到效果调优,手把手解决短帧曝光锁死问题
  • 深入学习Linux进程间通信:解析消息队列
  • Cortex-M55处理器信号接口与调试技术详解
  • 告别‘白底’图标!深入Android 13 Launcher3源码,解析非自适应图标的两种美化方案
  • JobOS:基于AI Agent与RAG的智能求职自动化平台设计与实践
  • 别再乱配STP了!华为S6520X/S5560组网中光模块BUG引发的全网风暴避坑指南
  • 基于智能体架构的A股自动化交易系统:TradingAgents-AShare项目深度解析
  • 告别读数不稳!基于STM32的CS1237电子秤/压力传感器项目避坑指南
  • ZimZ:现代化SSH连接管理工具的设计与实现
  • 别只当文献管理器!VOSviewer实战:用ESN案例教你一眼看穿学术江湖的派系与大佬
  • Cortex-M55内存安全架构与MPU配置实战
  • AI编码代理并行管理实战:Agent of Empires 架构与部署指南
  • 利用快马平台快速生成17资料图库免费资料展示网站原型
  • Belmont:基于Go的零配置前端构建工具,性能与开发体验的平衡之道
  • 信息安全工程师-入侵检测核心技术、APT 应对与工程实践
  • MsgHelper 5.0 合规设计解析:如何在“不 Hook”的前提下实现微信辅助?
  • 如何修改mac上的jmeter堆内存
  • 档位错配是降 AI 失败的 3 大原因之一——红黑榜出炉。
  • DeepSeek R1推理模型实战:思维链提取与应用
  • 利用快马平台快速构建dfs算法可视化原型,直观理解遍历过程
  • TI IWR1443 毫米波雷达开箱即用:不写一行代码,用官方Demo Visualizer GUI快速玩转点云数据
  • AMD Ryzen系统管理单元调试工具终极指南:轻松掌控你的处理器性能
  • 别再死磕官方文档了!用UE5.3亲手搭一个多人射击Demo,搞懂DS框架核心三要素
  • UE4载具制作避坑指南:从VehicleWheel设置到动画蓝图,解决车轮抖动与穿模
  • 微软Kernel Memory:开箱即用的RAG文档处理与智能记忆服务
  • NexusAgent智能代理框架:构建自动化系统的核心架构与实践
  • 别再只盯着MES了!半导体/面板厂CIM系统全家桶(EAP/YMS/SPC)保姆级入门指南
  • C++27模块系统实战部署指南:从Clang 19到MSVC 2025,5步完成百万行代码模块化迁移
  • ShapeR:多模态3D生成技术提升建模效率