【数据分析】numpy基础第三天

前言

本文只会讲解最常用的点乘(或叫矩阵乘法)、还有广播机制

本文代码

第1部分:基础数学计算

使用NumPy进行基本的数学运算是十分直观和简单的。下面我们将展示一些基本的加、减、乘、除运算。

和一个数字加减乘除

让我们首先创建一个简单的数组:

python 复制代码
import numpy as np

arr = np.array([[1, 2],
                [-1, 4]])

现在,我们将展示如何把一个整数与数组中的每个元素进行加减乘除。

和整数3的乘法
python 复制代码
arr * 3

该操作将会输出:

复制代码
array([[ 3,  6],
       [-3, 12]])
和整数3的加法
python 复制代码
arr + 3

该操作将会输出:

复制代码
array([[4, 5],
       [2, 7]])
和整数3的减法
python 复制代码
arr - 3

该操作将会输出:

复制代码
array([[-2, -1],
       [-4,  1]])
和整数3的除法
python 复制代码
arr / 3

该操作将会输出:

复制代码
array([[ 0.33333333,  0.66666667],
       [-0.33333333,  1.33333333]])

相同形状矩阵之间的加减乘除

当两个矩阵形状相同,NumPy允许进行元素级的运算。

相同形状矩阵之间的乘法
python 复制代码
A = np.array([[1, 2], [-1, 4]])
B = np.array([[2, 0], [3, 4]])

A * B

输出结果是:

复制代码
array([[ 2,  0],
       [-3, 16]])

以上代码执行的逻辑相当于对矩阵的对应位置的元素进行相乘,如下图所示,其余的加法、减法、除法的也是同理。

图1

相同形状矩阵之间的加法
python 复制代码
A + B

输出结果是:

复制代码
array([[3, 2],
       [2, 8]])
相同形状矩阵之间的减法
python 复制代码
A - B

输出结果是:

复制代码
array([[-1,  2],
       [-4,  0]])
相同形状矩阵之间的除法
python 复制代码
A / B  # 不必担心这里的红色警告,请看下文,这并不是你的问题。

在Numpy的除法运算中,如果除数中包含0,则会收到警告,但程序不会停止,该位置的结果会是无穷(inf)。

输出结果是:

复制代码
array([[ 0.5       ,         inf],
       [-0.33333333,  1.        ]])

点乘

点乘(dot product)或矩阵乘法在NumPy中非常重要,但是在数据分析上应用较少,了解即可。

python 复制代码
X1 = np.array([[1, 2], [3, 4]])
X2 = np.array([[5, 6, 7], [8, 9, 10]])

X3 = np.dot(X1, X2)

输出结果是:

复制代码
array([[21, 24, 27],
       [47, 54, 61]])

图2展示了点乘(矩阵乘法)的逻辑

下面用虚线框住的矩阵里面的东西,代表下面:

左边矩阵第一行,和右边矩阵第一列,逐个相乘再求和,得到输出矩阵的第一行第一列上的单个元素

左边矩阵的列轴的大小,必须与右边矩阵的行轴的大小相等。

图2

第2部分:统计函数

NumPy内置的统计函数可以简化数据分析的工作。

python 复制代码
c = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

print("平均值:", np.mean(c))
print("中位数:", np.median(c))
print("标准差:", np.std(c))
print('最大值', np.max(c))
print('最小值', np.min(c))

这段代码会输出数组的平均值、中位数、标准差、最大值和最小值。

第3部分:广播机制

NumPy的广播机制允许对不同形状的数组进行数学运算。这是NumPy强大的功能之一,但也是比较抽象的概念。

简单来说,广播机制会按照一定的规则扩展数组的形状,使其匹配,然后进行运算。

通过代码案例感受广播

下面代码的广播机制的逻辑将会展示在下面的图中。

python 复制代码
A = np.arange(0, 40,10).reshape(4, 1)
B = np.arange(0, 3)

C = A + B

输出结果是:

复制代码
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

对于上面的代码的广播机制,请看下图:

图3

广播机制的具体规则

广播机制遵循四个基本规则,确保形状不完全匹配的数组也能进行运算。

建议结合更下面的逐条规则剖析刚才的广播代码的文段来理解广播机制的具体规则

NumPy的通用函数中,要求输入的数组形状,也就是shape属性是一致的,当数组的shape不相等的时候,则会使用广播机制调整数组使得shape一样,不过,需满足一定规则,否则将出错。这些规则可归结为以下四条:

  1. 让所有输入数组都向其中shape最长的数组看齐 ,shape中不足的部分都通过在前面加1补齐;如:a:2x3x2;b:3x2;则b向a看齐,在b的前面加1:变为:1x3x2
  2. 输出数组的shape是输入数组shape的各个轴上的最大值
  3. 如果输入数组的某个轴和输出数组(由参与计算的数组中的各个轴的最大值组成,请看规则2)的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错;
  4. 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的仅有的一组值进行计算

逐条规则剖析刚才的广播代码

我们刚才讲过的广播机制的代码如下所示:

python 复制代码
A = np.arange(0, 40,10).reshape(4, 1)
B = np.arange(0, 3)

C = A + B

输出结果是:

复制代码
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])
  1. 满足规则1:数组A的shape为(4,1),有4行1列,数组B的shape为(3,),加1补齐后,即有1行3列。
  2. 满足规则2:C是输出数组,它的形状是输入数组的各个轴上的最大值,数组A拥有最大的行轴,有4行;数组B只有一行,但是有3列,这是最大的列轴
  3. 满足规则3:输出数组为C,shape为(4, 3),对于shape为(4, 1)的数组A,行轴大小刚好与数组C相等,列轴大小为1,数组B同理。
  4. 满足规则4:如上面的图3所示。
相关推荐
久违 °1 天前
【AI-Agent】TagMatrix 数据标注工具开发
人工智能·数据分析·go·agent·数据隐私
城数派1 天前
2026年500米分辨率DEM地形数据(全球/全国/分省/分市)
数据库·arcgis·信息可视化·数据分析·excel
DisonTangor1 天前
跃阶星辰开源Step 3.7 Flash:原生多模态,最高生成速度400 Tokens/s
人工智能·语言模型·数据挖掘·开源·aigc
weixin_468466851 天前
图像分类技术落地应用与实战指南
人工智能·深度学习·ai·分类·数据挖掘·图像分类·模型部署
春日见2 天前
强化学习方法分类:
人工智能·机器学习·分类·数据挖掘·强化学习
搞科研的小刘选手2 天前
【大数据方向专题研讨会】第三届大数据与数字化管理国际学术会议(ICBDDM 2026)
大数据·信息安全·数据挖掘·云计算·可视化·供应链·信息管理
高洁012 天前
设备故障?数字孪生提前预警
深度学习·机器学习·数据挖掘·transformer·知识图谱
Sharewinfo_BJ2 天前
Power BI 5月重磅更新:8大新功能全面提升数据分析效率
大数据·人工智能·数据分析
weixin_468466852 天前
Crawl4Ai 智能数据采集与场景化应用指南
大数据·人工智能·爬虫·python·数据分析
极光代码工作室2 天前
基于Spark的电商用户点击流分析系统
大数据·python·数据分析·spark·数据可视化