小白的机器学习实战——向量,矩阵和数组 小白的机器学习实战——向量,矩阵和数组

创建矩阵

import numpy as np
# 创建矩阵
matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9],
                   [10, 11, 12]])

向量

# 行向量
vector_row = np.array([1, 2, 3])
# 列向量
vector_column = np.array([[1],
                          [2],
                          [3]])

计算平均值,方差和标准偏差

# 计算均值
np.mean(matrix)
>>> 6.5
# 计算方差
np.var(matrix)
>>> 11.916666666666666
# 计算标准差
np.std(matrix)
>>> 3.4520525295346629

重塑矩阵

# 第二维可以为-1让程序自己推断,如matrix.reshape(2, -1)
matrix.reshape(2, 6)
>>> array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12]])

矩阵加减法

# 创建矩阵a
matrix_a = np.array([[1, 1, 1],
                     [1, 1, 1],
                     [1, 1, 2]])

# 创建矩阵b
matrix_b = np.array([[1, 3, 1],
                     [1, 3, 1],
                     [1, 3, 8]])

# 矩阵相加
np.add(matrix_a, matrix_b)
array([[ 2,  4,  2],
       [ 2,  4,  2],
       [ 2,  4, 10]])

# 矩阵相减
np.subtract(matrix_a, matrix_b)
array([[ 0, -2,  0],
       [ 0, -2,  0],
       [ 0, -2, -6]])

对矩阵元素进行操作

# 创建一个方法:对每个元素加10
add_100 = lambda i: i + 10

# 在对numpy的数组进行操作时,我们应该尽量避免循环操作,尽可能利用矢量化函数来避免循环。但是,直接将自定义函数应用在numpy数组之上会报错,我们需要将函数进行矢量化转换.
vectorized_add_100 = np.vectorize(add_100)

# 最后将函数应用到矩阵上
vectorized_add_100(matrix)
>>> array([[11, 12, 13],
           [14, 15, 16],
           [17, 18, 19],
           [20, 21, 22]])

创建稀疏矩阵

# 创建一个矩阵,其中零元素远远多于非零元素
matrix = np.array([[0, 0],
                   [1, 0],
                   [0, 6]])
# 由于稀疏矩阵中非零元素较少,零元素较多,因此可以采用只存储非零元素的方法来进行压缩存储。
# 另外对于很多元素为零的稀疏矩阵,仅存储非零元素可使矩阵操作效率更高,速度更快。
# python不能自动创建稀疏矩阵,所以要用scipy中特殊的命令来得到稀疏矩阵。
from scipy import sparse
matrix_sparse = sparse.csr_matrix(matrix)

描述一个矩阵

# 查看行和列
matrix.shape
>>> (4, 3)
# 查看所有元素个数(行*列)
matrix.size
>>> 12
# 查看维数
matrix.ndim
>>> 2

最大值和最小值

# 最大值
np.max(matrix)
>>> 12
# 最小值
np.min(matrix)
>>> 1
# 按列查找最大元素
np.max(matrix, axis=0)
>>> array([10, 11, 12])
# 按行查找最大元素
np.max(matrix, axis=1)
>>> array([3, 6, 9,12])

矩阵求逆

# 创建一个新矩阵
matrix_n = np.array([[1, 2],
                   [3, 4]])
# 计算逆矩阵
np.linalg.inv(matrix_n)
>>> array([[-2. ,  1. ],
       [ 1.5, -0.5]])

展平矩阵

matrix.flatten()
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])

元素选择

# 对一个向量
vector = np.array([1, 2, 3, 4, 5, 6])
vector[1]
>>> 2
# 对于一个矩阵
matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
matrix[1,1]
>>> 5
对于一个张量(高维矩阵)
tensor = np.array([
    [[[1, 1], [1, 1]], [[2, 2], [2, 2]]],
    [[[3, 3], [3, 3]], [[4, 4], [4, 4]]]
                  ])
tensor[1,1,1]
>>> array([4, 4])

计算矩阵点乘(对应位置相乘之后再相加)

vector_a = np.array([1,2,3])
vector_b = np.array([4,5,6])
# 方法一
np.dot(vector_a, vector_b)
>>> 32
# 方法二
vector_a @ vector_b
>>> 32

计算矩阵的行列式(The Determinant Of A Matrix)、矩阵的迹(The Trace Of A Matrix)和矩阵的秩(The Rank Of A Matrix)

matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
# 行列式:行列式(Determinant)是数学中的一个函数,将一个 n*n的矩阵A映射到一个标量,记作det(A)或|A|
np.linalg.det(matrix)
>>> -9.5161973539299405e-16

# 迹:在线性代数中,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A的迹(或迹数),一般记作tr(A)。
# 先获得矩阵的对角线
matrix.diagonal()
>>> array([1, 5, 9])
# 对角线求和就是迹
matrix.diagonal().sum()
>>> 15
# 秩:在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。
np.linalg.matrix_rank(matrix)
>>> 2

矢量或矩阵转置

# 创建一个矢量
vector = np.array([1, 2, 3, 4, 5, 6])
# 转置
vector.T
>>> array([1, 2, 3, 4, 5, 6])

# 创建一个矩阵
matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
# 转置
matrix.T
>>> array([[1, 4, 7],
          [2, 5, 8],
          [3, 6, 9]])

参考:https://chrisalbon.com/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

R语言预处理之异常值问题

>>>> 一、问题 什么是异常值?如何检测异常值?请伙伴们思考或者留言讨论。 >>>> 二、解决方法 1. 单变量异常值检测 2. 使用局部异常因子进行异常值...

29410
来自专栏林德熙的博客

C# 判断两条直线距离

d= \frac{ \left| C_1-C_2 \right|}{\sqrt{A^2+B^2}}

1162
来自专栏张俊红

Sklearn参数详解—SVM

2K4
来自专栏逸鹏说道

码农眼中的数学之~矩阵专栏(附Numpy讲解)

吐槽一下:矩阵本身不难,但是矩阵的写作太蛋疼了 (⊙﹏⊙)汗 还好有 Numpy,不然真的崩溃了...

5704
来自专栏Python小屋

一维序列卷积之Python实现

在数字信号处理中经常会用到卷积计算,例如各种滤波器的设计。两个序列的卷积计算大体需要3步: 1)翻转其中一个序列; 2)移动翻转后的序列,并计算每次移动后两个序...

5279
来自专栏数据结构与算法

线性代数学习笔记(代数版)

\(A^T\)表示矩阵的转置,即\(a_{ij}^{T} = a_{ji}\),相当于把矩阵沿主对角线翻转

1094
来自专栏AIUAI

Caffe2 - (二十三) Detectron 之 utils 函数(1)

68812
来自专栏武培轩的专栏

Leetcode#867. Transpose Matrix(转置矩阵)

1273
来自专栏决胜机器学习

从机器学习学python(四) ——numpy矩阵基础

从机器学习学python(四)——numpy矩阵基础 (原创内容,转载请注明来源,谢谢) 一、numpy中matrix 和 array的区别 ...

4397
来自专栏应兆康的专栏

Accuracy

$A_{cc}=\frac{1}{n}\sum{I(\hat{y}_i=y_i)}$

841

扫码关注云+社区