大家好,我是贺老师,嵌入式 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)
因平台推荐规则变化,多点赞和在看**,我们才能常出现在你的推送里。**