NumPy实现线性代数常见操作

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

776a7ef259ea814ba94d59c6be3b4c84.png

机器学习和深度学习模型需要大量的数据。它们的性能在很大程度上取决于数据量。因此,我们倾向于收集尽可能多的数据,以建立一个稳健和准确的模型。数据以多种不同的格式收集,从数字到图像,从文本到声波。然而,我们需要将数据转换为数字以便对其进行分析和建模。

仅仅将数据转换为标量(单个数字)是不够的。随着数据量的增加,使用标量的操作开始变得低效。我们需要向量化或矩阵运算来有效地进行计算。这就是线性代数发挥作用的地方。

线性代数是数据科学领域的重要课题之一。在这篇文章中,我们将通过使用NumPy的例子来介绍线性代数的基本概念。

NumPy是Python的一个科学计算库,是许多库(比如Pandas)的基础。

线性代数中的对象类型

线性代数中的对象(或数据结构)类型:

  • 标量:单个数字

  • 向量:数字数组

  • 矩阵:二维数字数组

  • 张量:N>2的N维数列

标量就是一个数字。我们将在下面的示例中看到,它可以用于向量化操作。

向量是一组数字。例如,5个元素的向量:

5544d7d899f761d9243879dec3937ffa.png

我们可以在向量化运算中使用标量。对向量的每个元素执行指定的操作。例如

9c61847ea471e234fa6c4d3ce0d2d589.png

矩阵是二维向量

d7ee48fd07d255b4444a29086df00be0.png

它看起来像是一个包含行和列的pandas数据框。实际上,pandas数据帧被转换成矩阵,然后输入到机器学习模型中。

张量是一个N维数数组,其中N大于2。张量主要用于输入数据为三维的深度学习模型。

36753f02b900b872314990d93f1a3d3c.png

很难用数字来表示,但是可以把T看成3个3x2形状的矩阵。

shape方法可用于检查numpy数组的形状。

05ec44a5f4afcd94c245a73a5e9945c2.png

数组的大小是通过乘以每个维度的大小来计算的。

f9ad6e9b7b65fb32c1311b31db9ef88f.png

常用矩阵术语

如果行数等于列数,矩阵称为方阵。因此,上面的矩阵A是一个方阵。

单位矩阵,表示为I,是一个方阵,对角线上有是,其他位置全是0。NumPy的identity函数可以用来创建任意大小的单位矩阵。

a7b40a2e382e6c7d4c90137335e2b7ba.png

一个单位矩阵的特殊之处在于矩阵乘上它不会改变。从这个意义上讲,它与实数中的数字1相似。我们将在这篇文章的矩阵乘法部分用单位矩阵做例子。

矩阵的逆矩阵是与原始矩阵相乘得到单位矩阵的矩阵。

71cda350a26d756acd7479b9b5232f34.png

不是每个矩阵都有一个逆矩阵。如果矩阵A有一个逆矩阵,那么它被称为可逆或非奇异

点乘与矩阵乘法

点乘和矩阵乘法是复杂机器学习和深度学习模型的组成部分,因此对它们进行全面的了解是非常有价值的。

两个向量的点积是元素相对于其位置的乘积之和。第一个向量的第一个元素乘以第二个向量的第一个元素,依此类推。这些积的和就是点积。在NumPy中计算点积的函数是「dot()」

让我们首先以numpy数组的形式创建两个简单的向量并计算点积。

cf1cb0be55a50e50ddbbd57abfd6f3d0.png

点积计算为(1*2)+(2*4)+(3*6),即28。

因为我们在相同的位置相乘,所以这两个向量的长度必须相同才能得到点积。

在数据科学领域,我们主要处理矩阵。矩阵是一组以结构化方式组合的行和列向量。因此,两个矩阵的相乘涉及向量的许多点积运算。我们再看一些例子就会更清楚了。我们先用NumPy创建两个2x2矩阵。

33a8140397835f8cb09554f5ecae15fd.png d687ae4d92df2065b444c6598fcfecb5.png

2x2矩阵有2行2列。行和列的索引以0开头。例如,A(索引为0的行)的第一行是[4,2]的数组。A的第一列是[4,0]的数组。第一行和第一列的元素是4。

我们可以访问单个行、列或元素,如下所示:

db4d63dfa598eb244d385d85fcf071d9.png

这些是理解矩阵乘法的重要概念。

两个矩阵的相乘涉及到第一个矩阵的行和第二个矩阵的列之间的点乘。第一步是A的第一行和B的第一列之间的点积。这个点积的结果是在位置[0,0](即第一行,第一列)处得到的矩阵的元素。

6cc56b045fb71faf377fb9b3c81977a7.png

因此,得到的矩阵C在第一行和第一列将有一个 (4*0) + (2*4) 。C[0,0]=18。

下一步是A的第一行和B的第二列的点积。

645badca3a76b60b9c76d69cbc0b83b5.png

C在第一行和第二列有一个(4*0)+(2*4)。C[0,1]=8。

第一行A已完成,因此我们从A的第二行开始,并遵循相同的步骤。

b35bd4472adb00063ec4c6269e04f32b.png

C在第二行和第一列有一个(0*4)+(3*1)。C[1,0]=3。

最后一步是A的第二行和B的第二列之间的点积。

a80f685f6f9eaf5a341d17f71931d188.png

C在第二行和第二列有一个(0*0)+(3*4)。C[1,1]=12。

我们已经看到它是如何一步一步完成的。所有这些操作都是用「np.dot」操作:

98667f7a961e056ad8e1c9fd63cc06ab.png

你可能还记得,我们已经提到过,单位矩阵乘以任何矩阵时不会改变矩阵。让我们举个例子。

6ab57a01e3c62c99971caa2fbc0e6a18.png

我们还提到,当一个矩阵乘以它的逆矩阵时,结果就是单位矩阵。让我们先创建一个矩阵,然后求它的逆矩阵。我们可以利用NumPy函数**linalg.inv()**求矩阵的逆。

8eb9dcf300ef3b2d4a226103d46f8f46.png

用B的逆矩阵C乘以B:

b54373ec1023eefbd8cdd2beb672a85a.png

我们得到了单位矩阵。


正如我们在向量点积中回忆的那样,两个向量的长度必须相同才能有一个点积。矩阵乘法中的每个点积运算都必须遵循这个规则。点积是在第一个矩阵的行和第二个矩阵的列之间进行的。因此,第一个矩阵的行和第二个矩阵的列的长度必须相同。

矩阵乘法的要求是第一个矩阵的列数必须等于第二个矩阵的行数。

例如,我们可以用一个3x2矩阵乘以一个2x3矩阵。

f63f7f789e2ab318fd0eef2663a3afdb.png

结果矩阵的形状将是3x3,因为我们对A的每一行进行3点积运算,A有3行。确定结果矩阵形状的一种简单方法是从第一个矩阵中提取行数,从第二个矩阵中提取列数:

  • 3x2和2x3相乘返回3x3

  • 3x2和2x2相乘返回3x2

  • 2x4和4x3相乘返回2x3


我们已经讨论了线性代数的基本运算。这些基本操作是复杂机器学习和深度学习模型的构建基础。在模型优化过程中,需要进行大量的矩阵乘法运算。因此,了解基础知识也是非常重要的。

谢谢你的阅读。如果你有任何反馈,请告诉我。

原文链接:https://towardsdatascience.com/linear-algebra-for-data-scientists-explained-with-numpy-6fec26519aea

debcc00181f768e6d0c8f1e4391547cb.png

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值