[Python系列-10]:Python之人工智能 - 基本工具 -4- 数组与矩阵数学工具Numpy

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python系列-10]:Python之人工智能 - 基本工具 -4- 数组与矩阵数学工具Numpy相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119281620


目录

第1章 Numpy简介

 1.1 什么是矩阵?

1.2 什么是数组?

1.3 数组与矩阵的异同

1.4 什么是Numpy?

1.5 Numpy与深度学习

第2章 numpy数组库

2.1 numpy数组array概述

2.2 array数组对象的定义

2.3 数组的属性

第3章 创建并初始化特定的数组

3.1 创建一个未初始化数组:numpy.empty

3.2 创建一个全0的数组:numpy.zeros

3.3 创建全1的数组: numpy.ones

3.4 从已有数组创建新数组:numpy.asarray()

3.5 从一段范围内创建新数组:numpy.arange() =》使用广泛

3.6 构建等差数列数组:numpy.linspace()

3.7 构建l等比数列的数组:numpy.logspace()

第4章 numpy的矩阵库

 4.1 创建空矩阵:matlib.empty()

4.2 创建随机数矩阵:numpy.matlib.rand()

4.3 创建全0的矩阵:numpy.matlib.zeros()

4.4 创建全1的矩阵:numpy.matlib.ones()

4.5 对角线为1的矩阵:numpy.matlib.eye()

4.6 单位矩阵:numpy.matlib.identity()

 第5章 numpy数组与矩阵的公共操作

 5.1 矩阵转数组:asarray()

5.2 数组转矩阵:asmatrix ()

 5.3 获取数据类型:dtype()

5.4 数据的维度:shape()

5.5 数据的维度的重构:shape()

5.6 数据的维度的重构:reshape()



第1章 Numpy简介

 1.1 什么是矩阵?

在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数实数集合

1.2 什么是数组?

数组(Array)是有序的相同数据类型元素序列的集合。

1.3 数组与矩阵的异同

(1)相同点

  • 结构化数据相同:都是用来存储、管理相同类型的结构化数据
  • 数据的存放方式相同:按照维度来管理数据的
  • 数据的访问方式类似:都是通过下标进行范围个别元素

(2)不同点

  • 目的不同:数组主要用户存储和管理数据,矩阵用于存储数据和数据数学运算。
  • 维度不同:数组是任意维度的,而矩阵通常是1维和2维的。
  • 运算不同:数组和数组之间可以进行线性运算,而矩阵与矩阵之间,可以进行矩阵运算
  • 内容不同:数组存储的数据可以是数字,也可以是非数字;矩阵存储的是数字。
  • 范围不同:多维数组范围更广,包括线性代数的运算,矩阵仅限于矩阵相乘运算。

1.4 什么是Numpy?

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。

这种工具可用来:

  • 存储和处理大型数组和矩阵,比Python自身的嵌套列表(nested list structure)结构要高效很多。Numpy是组织、管理、操作按照矩阵形式组织的大规模、结构化数据非常有效的Python工具。
  • 针对数组提供大量的数学函数库,支持大量维度数组的数学运算。
  • 针对矩阵提供大量的数学函数库,支持大量维度矩阵的数学运算。

备注:本文重点关注数组数据与矩阵数据的创建与管理,至于它们的数学运算,在数学人工智能的数学基础章节中再进一步的探讨。

Numpy同时支持数组与矩阵:

  • 数组:np.array
  • 矩阵:np.matlib

Numpy中数组与矩阵的互转

矩阵总是二维的,而 ndarray 是一个 n 维数组。 两个对象都是可互换的。

  • 矩阵转为数组:np.asarray
  • 数组转为矩阵:np.asmatrix

主页:https://www.runoob.com/numpy/numpy-linear-algebra.html

安装:Anaconda: 免费 Python 发行版,用于进行大规模数据处理、预测分析,和科学计算,致力于简化包的管理和部署。支持 Linux, Windows 和 Mac 系统。

1.5 Numpy与深度学习

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习

 熟悉NumPy库的使用是学习人工智能矩阵运算最好的途径。

第2章 numpy数组库

2.1 numpy数组array概述

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

ndarray 中的每个元素在内存中都有相同存储大小的区域。

ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。

  • 数据类型或 dtype,描述在数组中的固定大小值的格子。

  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。

ndarray 的内部结构:

2.2 array数组对象的定义

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

参数说明:

名称描述
object数组或嵌套的数列
dtype数组元素的数据类型,可选
copy对象是否需要复制,可选
order创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度

实例

接下来可以通过以下实例帮助我们更好的理解。

实例 1

import numpy as np 
a = np.array([1,2,3])  
print (a)

输出结果如下:

[1 2 3]

实例 2

# 多于一个维度  
import numpy as np 
a = np.array([[1,  2],  [3,  4]])  
print (a)

输出结果如下:

[[1  2] 
 [3  4]]

实例 3

# 最小维度  
import numpy as np 
a = np.array([1, 2, 3, 4, 5], ndmin =  2)  
print (a)

输出如下:

[[1 2 3 4 5]]

实例 4

# dtype 参数  
import numpy as np 
a = np.array([1,  2,  3], dtype = complex)  
print (a)

输出结果如下:

[1.+0.j 2.+0.j 3.+0.j]

ndarray 对象由计算机内存的连续一维部分组成,并结合索引模式,将每个元素映射到内存块中的一个位置。内存块以行顺序(C样式)或列顺序(FORTRAN或MatLab风格,即前述的F样式)来保存元素。

2.3 数组的属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。

在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。

所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。

很多时候可以声明 axis。

axis=0,表示沿着第 0 轴进行操作,即对每一列所有行数据进行操作;

axis=1,表示沿着第 1 轴进行操作,即对每一行所有列数据进行操作。

 AXIS 0 轴是沿着行(rows)的方向

在NumPy数组中,axis 0 是第一轴。对于二维或多维数组,axis 0 是沿行(row)向下的轴。(一维数组是特例,不适用此处解释,后续讲解)

 AXIS 1 轴是沿着列(columns)的方向

在NumPy数组中,axis 1 是第2根轴。对于二维或多维数组,axis 1 是沿列(columns)横穿的轴。

NumPy 的数组中比较重要 ndarray 对象属性有:

属性说明
ndarray.ndim秩,即轴的数量或维度的数量
ndarray.shape数组的维度,对于矩阵,n 行 m 列
ndarray.size数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtypendarray 对象的元素类型
ndarray.itemsizendarray 对象中每个元素的大小,以字节为单位
ndarray.flagsndarray 对象的内存信息
ndarray.realndarray元素的实部
ndarray.imagndarray 元素的虚部
ndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

第3章 创建并初始化特定的数组

3.1 创建一个未初始化数组:numpy.empty

numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组

import numpy as np 
x = np.empty([3,2], dtype = int) 
print (x)

输出结果为:

[[ 6917529027641081856  5764616291768666155]
 [ 6917529027641081859 -5764598754299804209]
 [          4497473538      844429428932120]]

3.2 创建一个全0的数组:numpy.zeros

创建指定大小的数组,数组元素以 0 来填充:

numpy.zeros(shape, dtype = float, order = 'C')

实例:

import numpy as np
 
# 默认为浮点数
x = np.zeros(5) 
print(x)
 
# 设置类型为整数
y = np.zeros((5,), dtype = np.int) 
print(y)
 
# 自定义类型
z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])  
print(z)

输出结果为:

[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
 [(0, 0) (0, 0)]]

3.3 创建全1的数组: numpy.ones

创建指定形状的数组,数组元素以 1 来填充:

numpy.ones(shape, dtype = None, order = 'C')

实例:

import numpy as np
 
# 默认为浮点数
x = np.ones(5) 
print(x)
 
# 自定义类型
x = np.ones([2,2], dtype = int)
print(x)

输出结果为:

[1. 1. 1. 1. 1.]
[[1 1]
 [1 1]]

3.4 从已有数组创建新数组:numpy.asarray()

import numpy as np 
 
x =  [1,2,3] 
a = np.asarray(x)  
print (a)

输出结果为:

[1  2  3]

3.5 从一段范围内创建新数组:numpy.arange() =》使用广泛

numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:

numpy.arange(start, stop, step, dtype)

根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 等差数列ndarray。(差指定,个数未指定)

参数说明:

参数描述
start起始值,默认为0
stop终止值(不包含)
step步长,默认为1
dtype返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
#实例:

import numpy as np
 
x = np.arange(5)  
print (x)

输出结果如下:

[0  1  2  3  4]

3.6 构建等差数列数组:numpy.linspace()

numpy.linspace 函数根据 start 与 stop 指定的范围以及元素的个数num,生成一个 等差数列ndarray(差未指定,个数指定)。

格式如下:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

参数说明:

参数描述
start序列的起始值
stop序列的终止值,如果endpointtrue,该值包含于数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep如果为 True 时,生成的数组中会显示间距,反之不显示。
dtypendarray 的数据类型

3.7 构建l等比数列的数组:numpy.logspace()

numpy.logspace 函数用于创建一个于等比数列。格式如下:

np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

base 参数意思是取对数的时候 log 的下标。

参数描述
start序列的起始值为:base ** start
stop序列的终止值为:base ** stop。如果endpointtrue,该值包含于数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为 true 时,数列中中包含stop值,反之不包含,默认是True。
base对数 log 的底数。默认10.
dtypendarray 的数据类型

#实例

import numpy as np
# 默认底数是 10
a = np.logspace(1.0,  2.0, num =  10)  
print (a)

输出结果为:

[ 10.           12.91549665     16.68100537      21.5443469  27.82559402      
  35.93813664   46.41588834     59.94842503      77.42636827    100.    ]

第4章 numpy的矩阵库

NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。

 4.1 创建空矩阵:matlib.empty()

(1)说明

所谓空矩阵,是指矩阵的数据未初始化,是不确定的

注意:不确定不是指随机数,而是指取决于当时的内容空间的实际值。

(2)格式

matlib.empty() 函数返回一个新的矩阵,语法格式为:

numpy.matlib.empty(shape, dtype, order)

参数说明:

  • shape: 定义新矩阵形状的整数或整数元组
  • Dtype: 可选,数据类型
  • order: C(行序优先) 或者 F(列序优先)

(3)案例

#实例

import numpy.matlib 
import numpy as np
 
print (np.matlib.empty((2,2)))
# 填充为随机数据
# 输出结果为:

[[-1.49166815e-154 -1.49166815e-154]
 [ 2.17371491e-313  2.52720790e-212]]

4.2 创建随机数矩阵:numpy.matlib.rand()

numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。

#实例
import numpy.matlib 
import numpy as np 
 
print (np.matlib.rand(3,3))


#输出结果为:

[[0.23966718 0.16147628 0.14162   ]
 [0.28379085 0.59934741 0.62985825]
 [0.99527238 0.11137883 0.41105367]]

4.3 创建全0的矩阵:numpy.matlib.zeros()

numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵。

#实例

import numpy.matlib 
import numpy as np 
 
print (np.matlib.zeros((2,2)))
#输出结果为:

[[0. 0.]
 [0. 0.]]

4.4 创建全1的矩阵:numpy.matlib.ones()

numpy.matlib.ones()函数创建一个以 1 填充的矩阵。

实例
import numpy.matlib 
import numpy as np 
 
print (np.matlib.ones((2,2)))
#输出结果为:

[[1. 1.]
 [1. 1.]]

4.5 对角线为1的矩阵:numpy.matlib.eye()

numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。

numpy.matlib.eye(n, M,k, dtype)

参数说明:

  • n: 返回矩阵的行数
  • M: 返回矩阵的列数,默认为 n
  • k: 对角线的索引
  • dtype: 数据类型
#实例

import numpy.matlib 
import numpy as np 
 
print (np.matlib.eye(n =  3, M =  4, k =  0, dtype =  float))
#输出结果为:

[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]]

4.6 单位矩阵:numpy.matlib.identity()

#实例
import numpy.matlib 
import numpy as np 
 
# 大小为 5,类型位浮点型
print (np.matlib.identity(5, dtype =  float))


#输出结果为:

[[ 1.  0.  0.  0.  0.] 
 [ 0.  1.  0.  0.  0.] 
 [ 0.  0.  1.  0.  0.] 
 [ 0.  0.  0.  1.  0.] 
 [ 0.  0.  0.  0.  1.]]

 第5章 numpy数组与矩阵的公共操作

 5.1 矩阵转数组:asarray()

#实例
import numpy.matlib 
import numpy as np  
 
i = np.matrix('1,2;3,4')  
print (i)

#输出结果为:

[[1  2] 
 [3  4]]
import numpy.matlib 
import numpy as np  
 
j = np.asarray(i)  
print (j)

#输出结果为:

[[1  2] 
 [3  4]]

5.2 数组转矩阵:asmatrix ()

#实例
import numpy.matlib 
import numpy as np  

k = np.asmatrix (j)  
print (k)
输出结果为:

[[1  2] 
 [3  4]]

 5.3 获取数据类型:dtype()

import numpy as np

# 使用标量类型
dt = np.dtype(np.int32)
print(dt)

输出结果为:

int32

5.4 数据的维度:shape()

ndarray.shape 表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。比如,一个二维数组,其维度表示"行数"和"列数"。

ndarray.shape数组的维度,对于矩阵,n 行 m 列
#实例
import numpy as np  
 
a = np.array([[1,2,3],[4,5,6]])  
print (a.shape)

#输出结果为:

(2, 3)

5.5 数据的维度的重构:shape()

#实例
import numpy as np 
 
a = np.array([[1,2,3],[4,5,6]]) 
print (a)

a.shape =  (3,2)  
print (a)

#输出结果为:
[[1 2 3]
 [4 5 6]]

[[1 2]
 [3 4]
 [5 6]]

5.6 数据的维度的重构:reshape()

NumPy 也提供了 reshape 函数来调整数组大小。

numpy.reshape 函数可以在不改变数据的条件下修改形状,

#实例
import numpy as np 
 
a = np.array([[1,2,3],[4,5,6]]) 
b = a.reshape(3,2)  
print (b)


#输出结果为:

[[1, 2] 
 [3, 4] 
 [5, 6]]

待续。。。。。。。。


作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119281620

以上是关于[Python系列-10]:Python之人工智能 - 基本工具 -4- 数组与矩阵数学工具Numpy的主要内容,如果未能解决你的问题,请参考以下文章

[Python系列-7]:Python之人工智能 - 基本工具 -1- Time库

[Python系列-9]:Python之人工智能 - 基本工具 -3- 函数可视化工具matplotlib

[Python系列-8]:Python之人工智能 - 基本工具 -2- 随机数生成库

[Python系列-6]:Python之人工智能 - 基本语法-3-程序循环控制语句:for...in,while

[Python系列-22]:Python之人工智能 - 基本工具 - 6- 绘制二元函数的三维曲面图

[Python系列-5]:Python之人工智能 - 基本语法-2- 类复合数据类型容器(列表集合元组字典)