【数据分析】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所示。
相关推荐
可观测性用观测云18 小时前
利用CMDB数据实现指标业务维度的动态扩展
数据分析
咚咚王者18 小时前
人工智能之数据分析 numpy:第一章 学习链路
人工智能·数据分析·numpy
中杯可乐多加冰18 小时前
数据分析案例详解:基于smardaten实现智慧交通运营指标数据分析展示
人工智能·低代码·数据分析·交通物流·智慧交通·无代码·大屏端
AI小云1 天前
【Numpy数据运算】Numpy速学手册
python·numpy
B站_计算机毕业设计之家1 天前
python手写数字识别计分系统+CNN模型+YOLOv5模型 深度学习 计算机毕业设计(建议收藏)✅
python·深度学习·yolo·计算机视觉·数据分析·cnn
SJLoveIT1 天前
机器学习之ravel()的作用
机器学习·numpy
咚咚王者1 天前
人工智能之数据分析 numpy:第四章 数组属性和数据类型
人工智能·数据分析·numpy
xuehaikj1 天前
【实战案例】基于dino-4scale_r50_8xb2-36e_coco的棉田叶片病害识别与分类项目详解
人工智能·数据挖掘
q***31832 天前
爬虫基础之爬取某基金网站+数据分析
爬虫·数据挖掘·数据分析
生信大表哥2 天前
贝叶斯共识聚类(BCC)
机器学习·数据挖掘·聚类