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

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

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

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

Python语法基础

变量和数据类型

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

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

控制结构

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

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

函数定义

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

python 复制代码
# 函数定义示例
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维数组)对象。

python 复制代码
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提供了丰富的数组操作函数

python 复制代码
# 数组运算
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项目中,我们通常需要从各种来源加载数据。

python 复制代码
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])

数据清洗

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

python 复制代码
# 处理缺失值示例
# 假设我们的数据中有一些缺失值(用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)

数据标准化

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

python 复制代码
# 数据标准化示例
# 使用之前的学生成绩数据
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)

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

相关推荐
小宋1021几秒前
不用学算法也能玩转 AI?普通 Java 程序员转 AI 应用开发路线
java·人工智能·重构
编程圈子3 分钟前
电机驱动开发学习19. 霍尔 BLDC 三段式 FOC 启动算法
驱动开发·学习·算法
米码收割机7 分钟前
【Python】Django 电子设备商城系统(源码+说明文档)[独一无二]
开发语言·python·django
迷茫中的自我10 分钟前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
龍德明宇11 分钟前
Emu3的「阳谋」:当AI不再「看」图,它还剩下什么?-龍德明宇
人工智能·大语言模型llm·负主体性·ai存在论
糖果店的幽灵11 分钟前
WorkBuddy + 好提示词 = 生产力。43 个场景,复制就能用
人工智能·langgraph
互联网中的一颗神经元12 分钟前
小白python入门 - 38. 动态内容:接口优先与自动化扫盲
开发语言·python·自动化
硅谷秋水14 分钟前
ABot-M0.5:统一的移动-与-操作世界动作模型
人工智能·深度学习·机器学习·计算机视觉·语言模型·机器人
卷无止境16 分钟前
模块与包:Python 代码组织的两层逻辑
后端·python
AI大模型-小华20 分钟前
Codex 为什么越用越慢?大型项目中的上下文管理与方案选择
人工智能·chatgpt·软件开发·codex·开发效率·chatgpt plus·chatgpt pro