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是控制偏移的

就写这些了。。。。。。。。。


阅读量: