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

2023-11-10

作者主页(文火冰糖的硅基工坊):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.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
ndarray.flags ndarray 对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag ndarray 元素的虚部
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 时,生成的数组中会显示间距,反之不显示。
dtype ndarray 的数据类型

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.
dtype ndarray 的数据类型

#实例

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 【c语言】练手:一个简单的图书管理系统

    c语言 练手 一个简单的图书管理系统 最近在学习结构体和结构体指针等内容 为了巩固所学习的内容 于是写了一个简陋的图书管理系统 在敲代码过程中也遇到一些容易忽略的问题 于是记录下来 大家可以给给建议 核心功能主要有3个 录入书籍信息 打印书
  • Android 退出整个程序代码

    今天在网上看见个博客关于退出整个程序的 感觉不错 拿来分享学习 SysApplication这个类复制到工程里面 然后在每个Acitivity的oncreate方法里面通过SysApplication getInstance addActi
  • layui table 字体大小_layui table表格详解

    上次做table有些东西 忘记了 这次当作来个分析总结一下 跟大家共同学习 闲话不多说 直接上例子 代码 layuitable初始化代码 layui use table function var table layui table tabl
  • Https 公钥私钥交换过程

    记录一下Https 公钥私钥加密过程 对称加密 编 解码使用相同密钥的算法 一般是共享密钥 非对称加密 非对称加密算法需要两个密钥 公开密钥 publickey 简称公钥 和私有密钥 privatekey 简称私钥 公钥与私钥是一对 如果用
  • 滤波去噪和小波去噪

    原文 http zhidao baidu com linkurl 7vqgj2oQ4MacZxGLdJXM lTCDdW3TrY6hbeInWeW7NWgcCFjO8qHbbm0U8lONrAanc6BQR7WwJB0GRzgZXZQLK
  • 【云原生&Docker基础篇】Docker的安装与使用(适用于初学者)

    博客首页 派 大 星 欢迎关注 点赞 收藏 留言 本文由派大星原创编撰 系列专栏 Docker 云原生 本系列记录容器化技术的初次探险与深入思考历程 如有描述有误的地方还望诸佬不吝赐教 文章目录 Docker 是什么 Docker的优点 D
  • 机械硬盘分区 最佳性能方案

    原理 机械硬盘的通过磁头读写数据 由于角速度恒定 磁头越靠近外圈 扫描的扇区越多 读写速度越快 3个磁盘分区方案 假设 磁盘半径r 10 内层半径r1 2 5 中层半径r2 5 外层半径r3 7 5 内层面积 s1 r2xr2 r1xr1
  • Android APP 与STM32无线环境控制系统

    本系统为安卓APP的环境参数远程监控系统 以STM32F103单片机作为本设计的中控中心 结合物联网技术 以Android智能手机作为远程控制的客户端 通过8266 WiFi模块实现环境监控系统硬件与Android手机的交互 环境参数的反馈
  • Android学习——MultiAutoCompleteTextView组件

    1 编辑activity main xml文件 添加MultiAutoCompleteTextView组件
  • unity3d 5 GUI Texture不显示原因分析

    Unity5添加GUI组件game视图无显示可能原因如下 1 Transform position应该为0 1之间为屏幕占比 2 scale大小比例 3 如果用系统自带的第一人称控制器 组件中不包括GUI层 因此应该在添加组件中Render
  • WSL2使用cuda

    在微软最新发布的 Windows Insider 预览版本中 WSL2 获得了 GPU 计算支持 这意味着 Linux 二进制文件可以利用 GPU 资源 在 WSL 中进行机器学习 AI 开发或是数据科学等工作 微软在今年五月份的 Buil
  • Web安全基础-SQL MySQL

    文章目录 SQL简介 数据库简介 SQL语句 SELECT 语句 INSERT INTO 语句 Delete语句 Update 语句 Order by 语句 Where 语句 运算符 Limit 控制输出 MySQL注释符 MySQL基础
  • IntelliJ IDEA搭建一个Spring boot项目运行“Hello World”

    目录 IntelliJ IDEA搭建一个Spring boot项目 Hello World 创建新项目 1 Create New Project 2 创建Spring Boot项目 3 项目命名 4 搭建Web项目 5 选择项目目录 6 导
  • VMware tools详细教程 解决安装失败等问题

    1 打开虚拟机VMware Workstation 启动Ubuntu系统 菜单栏 虚拟机 安装VMware Tools 不启动Ubuntu系统是无法点击 安装VMware Tools 选项的 如下图 必须在虚拟机内部进行安装 2 如果弹出如
  • 创建安装程序Visual Studio Installer

    1 在vs2010 选择 新建项目 其他项目类型 Visual Studio Installer 安装项目 命名为 Setup1 这是在VS2010中将有三个文件夹 1 应用程序文件夹 表示要安装的应用程序需要添加的文件 2 用户的 程序
  • Redis的启动方式三种

    Redis的启动方式三种 启动一个 进入到redis中的src目录下 在控制台输入指令 redis server 注意 这样启动默认端口是 6379 进入客户端输入 redis cli 查看进程 杀死进程 指定端口启动redis服务 red
  • 如果使用Vue3.0实现一个 Modal,你会怎么进行设计?

    一 组件设计 组件就是把图形 非图形的各种逻辑均抽象为一个统一的概念 组件 来实现开发的模式 现在有一个场景 点击新增与编辑都弹框出来进行填写 功能上大同小异 可能只是标题内容或者是显示的主体内容稍微不同 这时候就没必要写两个组件 只需要根
  • mysql thread conn_Mysql thread 与 OS thread

    gt 欢迎阅读 陈同学博客原文 本文作为 Mysql插入2 6亿条垃圾数据后会发生什么 手工重现Mysql插入的 2 6亿 垃圾数据 的续篇 初始目的是想看看kill掉执行中的事务对应的os thread之后会发生什么 同时学习下mysql
  • apt-get简介

    在Ubuntu系统中 经常要用到apt get install指令来安装软件 由于常常需要root权限来操作 所以搭配sudo食用口感更佳 apt get指令对于安装 卸载 升级软件提供一条龙服务 对比于源码安装 实在是业界良心 源码安装
  • [Python系列-10]:Python之人工智能 - 基本工具 -4- 数组与矩阵数学工具Numpy

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119281620 目录 第1章