numpy中matrix的常见操作
#numpy中matrix的常见操作
一篇文章让你基本懂得矩阵的操作
1.稀疏矩阵(sparse matrix)
import numpy as np
from scipy import sparse
matrix = np.array([[0,0],[0,1],[3,0]])
matrix_sparse = sparse.csr_matrix(matrix)
print(matrix_sparse)
输出:
(1,1) 1
(2,0) 3
稀疏矩阵主要是矩阵的另一种存储方式,这里借助的scipy中sparse的csr_sparse进行compressed sparse row(CSR) 说白了 就是压缩每一行稀疏的数据 只记录有效的数据,这里定义的稀疏的数据就是值为0的元素,换句话说就是只保留非0的值。 上述例子输出结果(1,1) 1中(1,1)表示矩阵的行索引值跟列索引值 1则是对应的元素值。 由此可以看出对矩阵进行该方式的处理的时候,是在矩阵中存在大量0值元素,这样才会更加有意义
2.矩阵的描述-三要素:形状 大小 维数(shape size dimension)
import numpy as np
matrix = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(matrix.shape)
print(matrix.size)
print(matrix.ndim)
输出:
(3,4)
12
2
形状 3行4列 大小 12=3*4 个元素 维数 2维
3.给矩阵中所有的元素添加运算
import numpy as np
matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
add_100 = lambda i: i + 100
vectorized_add_100 = np.vectorize(add_100)
vectorized_add_100(matrix)
输出:
array([[101,102,103],[104,105,106],[107,108,109]])
上面用了个lambda 定义的函数 定义了一个加100的操作 相当于:
def add_100(i):
return i + 100
pass
当然这是很基本的运算 numpy定义的矩阵本身也是支持基本运算的
matrix + 100
结果跟上面一样
4.矩阵最大最小值查找
import numpy as np
matrix = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
np.max(matrix)
np.min(matrix)
np.max(matrix,axis=0)
np.max(matrix,axis=1)
np.max(matrix,axis=2)
输出:
12
1
array([[ 7, 8, 9],
[10, 11, 12]])
array([[ 4, 5, 6],
[10, 11, 12]])
array([[ 3, 6],
[ 9, 12]])
max min 顾名思义就是查找最大最小值 不过max,min还能在带一个参数axis这个是是个维数数索引的参数,就是说也会找出与最大或最小值维数索引相同的元素出来,根据这些元素其他维数索引值的不同构成新的矩阵
5.矩阵的一些计算 平局值 方差 标准差(average,variance,standard deviation)
import numpy as np
matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
np.mean(matrix)
np.var(matrix)
np.std(matrix)
np.mean(matrix, axis=0)
输出:
5.0
6.666666666666667
2.581988897471611
array([4., 5., 6.])
np.mean() 求平局值
$\frac{\sum_{i,j=1}^{n,m}a_{ij}}{n*m}$
所有元素加和除以个数
np.var() 求方差
$\frac{\sum_{i,j=1}^{n,m}(a_{ij}-\overline{a})^2}{n*m}$
就是每个值减平均值的平方的和再除以个数
np.std() 求标准差
$\sqrt{\frac{\sum_{i,j=1}^{n,m}(a_{ij}-\overline{a})^2}{n*m}}$
就是方差开平方
ps:还可以带个axis的参数 说白了就是指定了维数索引的情况下 再来求对应的值
6.矩阵变形
import numpy as np
matrix = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
matrix.reshape(2,6)
输出:
array([[1,2,3,4,5,6],[7,8,9,10,11,12]])
说白了就是在保证矩阵大小(size)不变的情况下,可以改变矩阵的维数(dimension)以及形状(shape)
ps:要注意矩阵大小即size不能变
7.转置矩阵(transpose matrix)
import numpy as np
matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
matrix.T
输出:
array([[1,4,7],
[2,5,8],
[3,6,9]])
将矩阵的行列互换得到的新矩阵称为转置矩阵
ps:一维矩阵的转置矩阵就是它本身
8.扁平化矩阵(flattening a Matrix)
import numpy as np
matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
matrix.flatten()
输出:
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
就是把矩阵变形为一维矩阵
#也可以借助reshape 下面的结果是一样
matrix.reshape(matrix.size)
9.矩阵的秩(the rank of a matrix)
import numpy as np
matrix = np.array([[1,1,1],[1,1,10],[1,1,15]])
np.linalg.matrix_rank(matrix)
输出:
2
矩阵按照初等行变换原则变换为阶梯型矩阵,非0行数(该行中的所有元素值并不都是0)即为该矩阵的秩
10.矩阵的对角线(the diagonal of a matrix)
import numpy as np
matrix = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
matrix.diagonal()
matrix.diagonal(offset=1)
matrix.diagonal(offset=-1)
输出:
array([1, 4, 9])
array([2, 6])
array([4, 8])
好吧顾名思义 矩阵的对角线,参数offset是控制偏移的