Numpy中常用的10个矩阵操作示例(二)

简介: Numpy中常用的10个矩阵操作示例

如果你真的想转置一个向量,它应该被定义为一个带有双方括号的二维numpy数组。

importnumpyasnpa=np.array([[1, 2, 3]])
print("a = ")
print(a)
print("\na.T = ")
print(a.T)

640.png

迹 Trace

迹是方阵中对角线元素的和。有两种方法来计算迹。我们可以简单地使用ndarray对象的trace()方法,或者先获取对角线元素,然后再获取和。

importnumpyasnpa=np.array([[2, 2, 1],
              [1, 3, 1],
              [1, 2, 2]])
print("a = ")
print(a)
print("\nTrace:", a.trace())
print("Trace:", sum(a.diagonal()))

640.png

秩 Rank

矩阵的秩是由它的列或行张成(生成)的向量空间的维数。换句话说,它可以被定义为线性无关的列向量或行向量的最大个数。

可以使用numpy linalg包中的matrix_rank()函数来查找矩阵的秩。

importnumpyasnpa=np.arange(1, 10)
a.shape= (3, 3)
print("a = ")
print(a)
rank=np.linalg.matrix_rank(a)
print("\nRank:", rank)

640.png

行列式(决定式)

方阵的行列式可以计算det()函数,该函数也来自numpy linalg包。如果行列式是0,这个矩阵是不可逆的。在代数术语中,它被称为奇异矩阵。

importnumpyasnpa=np.array([[2, 2, 1],
              [1, 3, 1],
              [1, 2, 2]])
print("a = ")
print(a)
det=np.linalg.det(a)
print("\nDeterminant:", np.round(det))

640.png

方阵的逆可以通过numpy linalg包的inv()函数找到。如果方阵的行列式不为0,它的逆矩阵就为真。

importnumpyasnpa=np.array([[2, 2, 1],
              [1, 3, 1],
              [1, 2, 2]])
print("a = ")
print(a)
det=np.linalg.det(a)
print("\nDeterminant:", np.round(det))
inv=np.linalg.inv(a)
print("\nInverse of a = ")
print(inv)

640.png

如果你试图计算一个奇异矩阵(行列式为0的方阵)的真逆,你会得到一个错误。

importnumpyasnpa=np.array([[2, 8],
              [1, 4]])
print("a = ")
print(a)
det=np.linalg.det(a)
print("\nDeterminant:", np.round(det))
inv=np.linalg.inv(a)
print("\nInverse of a = ")
print(inv)

640.png

伪逆

即使对于奇异矩阵(行列式为0的方阵),也可以使用numpy linalg包的pinv()函数计算伪(非真实)逆。

importnumpyasnpa=np.array([[2, 8],
              [1, 4]])
print("a = ")
print(a)
det=np.linalg.det(a)
print("\nDeterminant:", np.round(det))
pinv=np.linalg.pinv(a)
print("\nPseudo Inverse of a = ")
print(pinv)

640.png

如果方阵是非奇异的(行列式不为0),则真逆和伪逆没有区别。

扁平化

Flatten是一种将矩阵转换为一维numpy数组的简单方法。为此,我们可以使用ndarray对象的flatten()方法。

importnumpyasnpa=np.arange(1, 10)
a.shape= (3, 3)
print("a = ")
print(a)
print("\nAfter flattening")
print("------------------")
print(a.flatten())

640.png

特征值和特征向量

设A是一个nxn矩阵。如果有一个非零向量x满足下列方程,λ标量称为A的特征值。

640.png

向量x称为与λ相对应的A的特征向量。

在numpy中,可以使用eig()函数同时计算特征值和特征向量。

importnumpyasnpa=np.array([[2, 2, 1],
              [1, 3, 1],
              [1, 2, 2]])
print("a = ")
print(a)
w, v=np.linalg.eig(a)
print("\nEigenvalues:")
print(w)
print("\nEigenvectors:")
print(v)

640.png

特征值的总和(1+5+1=7)等于同一个矩阵的迹(2+3+2=7)!特征值(1x5x1=5)的乘积等于同一个矩阵的行列式(5)!

特征值和特征向量在主成分分析(PCA)中非常有用。在主成分分析中,相关矩阵或协方差矩阵的特征向量代表主成分(最大方差方向),对应的特征值代表每个主成分解释的变化量。

关键要点总结

由于有了numpy库,只需一两行代码就可以轻松地执行矩阵操作。在本篇文章中我们介绍了numpy10个常用的矩阵运算。Numpy有一些通用函数,也有一些专门用于线性代数的特殊函数,例如,linalg包有一些专门用于线性代数的特殊函数。

在numpy中,矩阵和ndarray是两个不同的东西。熟悉它们的最好方法是亲自尝试这些代码。

在Scikit-learn机器学习库中,今天介绍的大多数矩阵操作在我们创建和拟合模型时是在后台进行工作的。例如,当我们使用Scikit-learn PCA()函数时,特征值和特征向量是在幕后计算的。Scikit-learn和许多其他的库,如pandas, seaborn, matplotlib都是建立在numpy之上的。因此,numpy是一个功能强大的Python库。

我们还可以将一些矩阵运算结合起来进行复杂的计算。例如,如果你想按这个顺序乘3个矩阵A, B和C,我们可以用np.dot(np.dot(A, B), C)。A, B, C的尺寸应相应匹配。

感谢你的阅读!

目录
相关文章
|
2月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 4
矩阵是由行和列构成的矩形数组,其元素可以是数字、符号或数学表达式。
31 4
|
2月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 2
不同于ndarray,matlib函数生成的是矩阵形式。教程中详细解释了矩阵的概念,并介绍了转置矩阵的实现方式,使用T属性或函数实现。此外,还展示了如何利用`matlib.empty()`创建指定形状的新矩阵,并可选择数据类型及顺序。最后通过示例演示了矩阵填充随机数据的方法。
34 3
|
1月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
66 10
|
1月前
|
Python
使用 NumPy 进行数组操作的示例
使用 NumPy 进行数组操作的示例
|
1月前
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
85 4
|
2月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 8
矩阵是由行和列构成的矩形数组,其元素可以是数字、符号或表达式。教程中讲解了如何使用`numpy.matlib.rand()`创建指定大小且元素随机填充的矩阵,并演示了矩阵与ndarray之间的转换方法。此外,还介绍了如何使用T属性进行矩阵转置。示例代码展示了创建矩阵、将其转换为ndarray以及再转回矩阵的过程。
42 9
|
2月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 6
主要内容包括矩阵的概念、转置操作及单位矩阵生成。使用numpy.matlib提供的工具,如`numpy.matlib.identity()`可创建指定大小的单位矩阵,示例中创建了一个5x5的浮点型单位矩阵,并展示了其输出结果。
32 0
|
6月前
|
Python
Numpy(Numerical Python)是一个用于处理大型多维数组和矩阵的Python库
【2月更文挑战第28天】Numpy(Numerical Python)是一个用于处理大型多维数组和矩阵的Python库
55 1
|
存储 机器学习/深度学习 数据挖掘
向量化操作简介和Pandas、Numpy示例
Pandas是一种流行的用于数据操作的Python库,它提供了一种称为“向量化”的强大技术可以有效地将操作应用于整个列或数据系列,从而消除了显式循环的需要。在本文中,我们将探讨什么是向量化,以及它如何简化数据分析任务。
258 0