【机器学习】嘿马机器学习(科学计算库)第6篇:Numpy,4.4 ndarray运算【附代码文档】

举报
程序员一诺python 发表于 2025/09/01 13:28:35 2025/09/01
【摘要】 1.机器学习常用科学计算库包括基础定位、目标。2. 人工智能概述涵盖人工智能应用场景、人工智能小案例、人工智能发展必备三要素、人工智能机器学习和深度学习。3. 机器学习概述包括机器学习工作流程、什么是机器学习、模型评估(回归模型评估、拟合)、Azure机器学习模型搭建、完整机器学习项目流程。4. 机器学习基础环境安装与使用包括Jupyter Notebook使用(一级标题、Ju

🏆🏆🏆教程全知识点简介:1.机器学习常用科学计算库包括基础定位、目标。2. 人工智能概述涵盖人工智能应用场景、人工智能小案例、人工智能发展必备三要素、人工智能机器学习和深度学习。3. 机器学习概述包括机器学习工作流程、什么是机器学习、模型评估(回归模型评估、拟合)、Azure机器学习模型搭建、完整机器学习项目流程。4. 机器学习基础环境安装与使用包括Jupyter Notebook使用(一级标题、Jupyter Notebook中自动补全代码等相关功能拓展)。5. Matplotlib可视化涵盖Matplotlib HelloWorld(什么是Matplotlib、实现简单Matplotlib画图折线图、画出温度变化图、准备数据、创建画布、绘制折线图、显示图像、构造x轴刻度标签、修改坐标刻度显示、设置中文字体、设置正常显示符号、保存图片)、添加坐标轴刻度、添加网格显示、添加描述信息、图像保存、设置图形风格、常见图形绘制(常见图形种类意义、散点图绘制)。6. Numpy包括Numpy优势、N维数组ndarray(ndarray属性)、基本操作(生成数组方法、生成0和1数组、从现有数组生成、创建符合正态分布stock涨跌幅数据)、数组间运算(数组与数的运算)。7. Pandas数据结构包括Series、DataFrame。8. 文件读取与存储涵盖CSV(read_csv)、HDF(read_hdf与to_hdf)、JSON(read_josn)。9. 高级处理数据离散化包括为什么要离散化、什么是数据离散化、stock涨跌幅离散化(读取stock数据、将stock涨跌幅数据进行分组、stock涨跌幅分组数据变成one_hot编码)、案例实现。


📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/458519    中查看

📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/455841    中查看

📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/458212    中查看

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

Numpy

学习目标

  • 了解Numpy运算速度上的优势
  • 知道数组的属性,形状、类型
  • 应用Numpy实现数组的基本操作
  • 应用随机数组的创建实现正态分布应用
  • 应用Numpy实现数组的逻辑运算
  • 应用Numpy实现数组的统计运算
  • 应用Numpy实现数组之间的运算

4.4 ndarray运算

学习目标

  • 目标

  • 应用数组的通用判断函数

  • 应用np.where实现数组的三元运算

问题

如果想要操作符合某一条件的数据,应该怎么做?

1 逻辑运算

# 生成10名同学,5门功课的数据


>>> score = np.random.randint(40, 100, (10, 5))



# 取出最后4名同学的成绩,用于逻辑判断


>>> test_score = score[6:, 0:5]



# 逻辑判断, 如果成绩大于60就标记为True 否则为False


>>> test_score > 60
array([[ True,  True,  True, False,  True],
       [ True,  True,  True, False,  True],
       [ True,  True, False, False,  True],
       [False,  True,  True,  True,  True]])



# BOOL赋值, 将满足条件的设置为指定的值-布尔索引


>>> test_score[test_score > 60] = 1
>>> test_score
array([[ 1,  1,  1, 52,  1],
       [ 1,  1,  1, 59,  1],
       [ 1,  1, 44, 44,  1],
       [59,  1,  1,  1,  1]])

2 通用判断函数

  • np.all()
# 判断前两名同学的成绩[0:2, :]是否全及格


>>> np.all(score[0:2, :] > 60)
False
  • np.any()
# 判断前两名同学的成绩[0:2, :]是否有大于90分的


>>> np.any(score[0:2, :] > 80)
True

3 np.where(三元运算符)

通过使用np.where能够进行更加复杂的运算

  • np.where()
# 判断前四名学生,前四门中,成绩中大于60的置为1,否则为0


temp = score[:4, :4]
np.where(temp > 60, 1, 0)
  • 复合逻辑需要结合np.logical_and和np.logical_or使用
# 判断前四名学生,前四门中,成绩中大于60且小于90的换为1,否则为0


np.where(np.logical_and(temp > 60, temp < 90), 1, 0)



# 判断前四名学生,前四门中,成绩中大于90或小于60的换为1,否则为0


np.where(np.logical_or(temp > 90, temp < 60), 1, 0)

4 统计运算

如果想要知道学生成绩最大的分数,或者做小分数应该怎么做?

4.1 统计指标

在数据挖掘/机器学习领域,统计指标的值也是我们分析问题的一种方式。常用的指标如下:

  • min(a, axis)

  • Return the minimum of an array or minimum along an axis.

  • max(a, axis])

  • Return the maximum of an array or maximum along an axis.

  • median(a, axis)

  • Compute the median along the specified axis.

  • mean(a, axis, dtype)

  • Compute the arithmetic mean along the specified axis.

  • std(a, axis, dtype)

  • Compute the standard deviation along the specified axis.

  • var(a, axis, dtype)

  • Compute the variance along the specified axis.

[schedule 文档]

4.2 案例:学生成绩统计运算

进行统计的时候,axis 轴的取值并不一定,Numpy中不同的API轴的值都不一样,在这里,axis 0代表列, axis 1代表行去进行统计

[bcrypt 文档]

# 接下来对于前四名学生,进行一些统计运算




# 指定列 去统计


temp = score[:4, 0:5]
print("前四名学生,各科成绩的最大分:{}".format(np.max(temp, axis=0)))
print("前四名学生,各科成绩的最小分:{}".format(np.min(temp, axis=0)))
print("前四名学生,各科成绩波动情况:{}".format(np.std(temp, axis=0)))
print("前四名学生,各科成绩的平均分:{}".format(np.mean(temp, axis=0)))

结果:

前四名学生,各科成绩的最大分[96 97 72 98 89]
前四名学生,各科成绩的最小分[55 57 45 76 77]
前四名学生,各科成绩波动情况[16.25576821 14.92271758 10.40432602  8.0311892   4.32290412]
前四名学生,各科成绩的平均分[78.5  75.75 62.5  85.   82.25]

如果需要统计出某科最高分对应的是哪个同学?

  • np.argmax(temp, axis=)
  • np.argmin(temp, axis=)
print("前四名学生,各科成绩最高分对应的学生下标:{}".format(np.argmax(temp, axis=0)))

结果:

前四名学生各科成绩最高分对应的学生下标[0 2 0 0 1]

5 小结

  • 逻辑运算【知道】

  • 直接进行大于,小于的判断

  • 合适之后,可以直接进行赋值

  • 通用判断函数【知道】

  • np.all()

  • np.any()

  • 统计运算【掌握】

  • np.max()

  • np.min()
  • np.median()
  • np.mean()
  • np.std()
  • np.var()
  • np.argmax(axis=) — 最大元素对应的下标
  • np.argmin(axis=) — 最小元素对应的下标

4.5 数组间运算

学习目标

[Tornado 文档]

  • 目标

  • 知道数组与数之间的运算

  • 知道数组与数组之间的运算
  • 说明数组间运算的广播机制

[os 文档]


[Python 标准库参考]

1 数组与数的运算

[Python.org 初学者指南]

arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr + 1
arr / 2



# 可以对比python列表的运算,看出区别


a = [1, 2, 3, 4, 5]
a * 3

2 数组与数组的运算

arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])

上面这个能进行运算吗,结果是不行的!

2.1 广播机制

数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。下面通过一个例子进行说明:

arr1 = np.array([[0],[1],[2],[3]])
arr1.shape


# (4, 1)



arr2 = np.array([1,2,3])
arr2.shape


# (3,)



arr1+arr2


# 结果是:


array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])

上述代码中,数组arr1是4行1列,arr2是1行3列。这两个数组要进行相加,按照广播机制会对数组arr1和arr2都进行扩展,使得数组arr1和arr2都变成4行3列。

下面通过一张图来描述广播机制扩展数组的过程:

这句话乃是理解广播的核心。广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。

广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可。

  • 如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符
  • 其中的一方的长度为1

[phonenumbers 文档]

广播会在缺失和(或)长度为1的维度上进行。

广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。

如果是下面这样,则不匹配:

A  (1d array): 10
B  (1d array): 12
A  (2d array):      2 x 1
B  (3d array):  8 x 4 x 3

思考:下面两个ndarray是否能够进行运算?

arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1], [3]])

3 小结

  • 数组运算,满足广播机制,就OK【知道】

  • 1.维度相等

  • 2.shape(其中对应的地方为1,也是可以的)

4.6 数学:矩阵

学习目标

  • 目标

  • 知道什么是矩阵和向量

  • 知道矩阵的加法,乘法
  • 知道矩阵的逆和转置
  • 应用np.matmul、np.dot实现矩阵运算

[Selenium Python 文档]

1 矩阵和向量

1.1 矩阵

矩阵,英文matrix,和array的区别矩阵必须是2维的,但是array可以是多维的。

如图:这个是 3×2 矩阵,即 3 行 2 列,如 m 为行,n 为列,那么 m×n 即 3×2无法显示矩阵的维数即行数×列数

矩阵元素(矩阵项):无法显示Aij 指第 i 行,第 j 列的元素。

1.2 向量

向量是一种特殊的矩阵,讲义中的向量一般都是列向量,下面展示的就是三维列 向量(3×1)。)A=[123] A = \left[ \right] A=​⎣​⎡​​​1​2​3​​​⎦​⎤​​

2 加法和标量乘法

矩阵的加法:行列数相等的可以加。

例:无法显示矩阵的乘法:每个元素都要乘。

例:无法显示组合算法也类似。

3 矩阵向量乘法

矩阵和向量的乘法如图:m×n 的矩阵乘以 n×1 的向量,得到的是 m×1 的向量

例:无法显示

1*1+3*5 = 16
4*1+0*5 = 4
2*1+1*5 = 7

矩阵乘法遵循准则:

(M行, N列)*(N行, L列) = (M行, L列)

4 矩阵乘法

[PyJWT 文档]

[Playwright Python]

矩阵乘法:

m×n 矩阵乘以 n×o 矩阵,变成 m×o 矩阵。

举例:比如说现在有两个矩阵 A 和 B,那 么它们的乘积就可以表示为图中所示的形式。

  • 练一练

[PySimpleGUI 文档]

  • 无法显示

求矩阵AB的结果

答案:无法显示

5 矩阵乘法的性质

矩阵的乘法不满足交换律:A×B≠B×A

矩阵的乘法满足结合律。即:A×(B×C)=(A×B)×C

单位矩阵:在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的 1,我们称 这种矩阵为**单

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。