python 数据处理基础之 numpy 与线性代数
1 向量
向量是线性代数的基础,但注意,一维数组不是向量!行向量、列向量都是特殊矩阵,也就是说,行向量、列向量都是二维数组。
比如, 下面代码生成一个长度为15的一维数组。
1 | a = numpy.arange(0, 15) |
通过 reshape 方法,我们将之转为行向量与列向量
1 | a = np.arange(0, 6) |
2 矩阵运算
因为 ndarray 运算功能的强大,使得它可以运用于矩阵的运算。更多关于矩阵运算及应用的知识,我们将在后面python 与线性代数
的相关学习里提及,这里说些简单的介绍性的。
2.1 矩阵的转置 T
ndarray 有个内置的 T 属性,可以直接返回一个矩阵的转置。
维度的对换!将 34 -> 43
1 | matrix = np.arange(12).reshape(3, 4) # 快速建立一个 3*4 的矩阵 |
2.2 矩阵的点积
这个也是很简单,直接 np.dot(matrix1, matrix2)
比如这样算一个矩阵的内积,就是矩阵与自己转置的点积 np.dot(matrix.T, matrix)
2.3 轴对换
轴对换主要两个方法:
1 | ndarray.transpose(tuple) |
transpose 参数给出新的轴排序;而 swapaxes,给出要替换的轴位置。
1 | arr = np.arange(24).reshape((2,3,4)) # 创建一个 2*3*4 的 3 维数组 |
上面这个例子怎么理解呢,首先我们要理解“轴”的概念。对于2*3*4
的数组,其中 2、3、4 就是它的轴,我们可以解决为此数据有 3 个轴,transpose((1,0,2))
中的参数决定了轴的重排序,就是 1、0、2,也就是第 0 轴与第 1 轴换了下位置。所以得出的新数组就应该是3*2*4
的数组。
swapaxes
表示哪两个轴交换位置,像上面的transpose
,其实就是第 0、1 轴交换位置。所以也可以用arr.swapaxes(0, 1)
,和transpose((1,0,2))
效果是一样的。
1 | # 下面 2 种交换轴方法是一样的 |
3 linalg 模块
NumPy 库的linalg 模块提供了许多用于线性代数计算的函数