当前位置: 首页 > web >正文

Numpy知识点

Numpy知识点

  • 1、数组概念
      • 1. **维数 / 维度 (Dimensions)**
      • 2. **秩 (Rank)**
      • 3. **轴 (Axis)**
      • 4. **形状 (Shape)**
      • 5.关键关系总结
      • 6.可视化理解
      • 7.操作示例
  • 2、Numpy知识点
      • 概念解释
      • 示例代码
      • 基础概念
      • 创建数组
      • 数组操作
      • 数学运算
      • 广播机制
      • 随机数生成
      • 参考

1、数组概念

在 NumPy 中,维数(Dimensions)=维度(Dimensions)=秩(Rank)、轴(Axis)、形状(Shape) 是描述数组结构的关键概念。它们相互关联但侧重点不同,以下是详细解释和对比:

总结关系

  • 秩 = 轴的数量 = 维数(维度数)
  • 形状描述各轴的长度,其元组长度等于秩;
  • 用于指定操作的方向(如 axis=0 表示行方向)。

例如,一个形状为 (3, 4, 5) 的数组:

  • 秩为 3(3 个轴);
  • 轴 0 长度为 3,轴 1 长度为 4,轴 2 长度为 5 。

概念解释

  • 维数 / 维度 (Dimensions)=秩(Rank):指数组存在的方向数量(即数组是几维的),指的是数组的秩(rank)即数组的轴(axis)数量,也就是数组嵌套的层数。例如,一维数组的维度是1,二维数组的维度是2,以此类推。
  • 轴(Axes):轴是数组的一个特定方向,每个维度对应一个轴,轴从外向内编号(从0开始)。在一维数组中,只有一个轴(轴0);在二维数组中,有两个轴,轴0表示行,轴1表示列;在三维数组中,轴0通常表示深度,轴1表示行,轴2表示列。三维数组:轴0是最外层(如多个二维数组堆叠),轴1是行方向,轴2是列方向。
  • 形状(Shape):形状是描述数组在每个维度上元素数量的元组,其长度等于秩。描述每个维度的大小的元组,形状的元素数 = 维数/秩。形状是一个元组,它表示数组在每个轴上的大小。例如, 一维数组 [1, 2, 3] 的形状为 (3,)(1 个轴,长度为 3);二维数组 [[1, 2], [3, 4]] 的形状为 (2, 2)(2 个轴,每个轴长度为 2);三维数组 [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] 的形状为 (2, 2, 2)(3 个轴,每个轴长度为 2)。

1. 维数 / 维度 (Dimensions)

  • 定义:指数组存在的方向数量(即数组是几维的)。指数组的层级嵌套结构,也就是数组嵌套的层数。例如一维数组(向量)、二维数组(矩阵)、三维数组(立方体)等。
  • 示例
    • 标量(单个数字)是 0 维(没有方向)。
    • 向量(如 [1, 2, 3])是 1 维(只有行)。
    • 矩阵(如 [[1, 2], [3, 4]])是 2 维(行和列)。
    • 三维张量(如图像数据)是 3 维(高、宽、通道)。
  • 获取方式ndarray.ndim 属性。

  • 维数(或维度)是数组的轴(axis)数量,表示数组的空间结构。例如:
    • 一维数组(如 [1, 2, 3])有 1 个轴,维数为 1;
    • 二维数组(如 [[1, 2], [3, 4]])有 2 个轴,维数为 2;
    • 三维数组(如 [[[1, 2], [3, 4]], [[5, 6], [7, 8]]])有 3 个轴,维数为 3。
  • 维数也被称为 (rank)。

2. 秩 (Rank)

  • 定义秩 = 维数(NumPy 中两者完全等价)。指数组中轴的个数。(rank)是数组的轴数量,即维数的具体数值。一维数组的秩为 1,二维数组的秩为 2,以此类推 。
  • 示例
    • 标量:秩 = 0
    • 向量:秩 = 1
    • 矩阵:秩 = 2
  • 获取方式ndarray.ndim

3. 轴 (Axis)

轴(Axis):每个维度对应一个轴,轴从外向内编号(从0开始)。

  • 例如:
    二维数组:轴0是行方向,轴1是列方向。
    三维数组:轴0是最外层(如多个二维数组堆叠),轴1是行方向,轴2是列方向。
    关系:维度与轴等价,轴是维度的具体实现形式。

  • 定义:数组的维度方向。轴从 0 开始编号:

    • axis=0:第一个维度(最外层)。
    • axis=1:第二个维度(次外层)。
    • 以此类推。
  • 核心作用:指定操作的方向(如求和、拼接等)。


  • (axis)是数组中某一维度的具体编号。轴的编号从 0 开始,用于指定操作的方向:
    • 对于二维数组(如矩阵),轴 0 表示 行方向(垂直),轴 1 表示 列方向(水平)。
    • 例如,对数组 a = [[1, 2], [3, 4]] 沿轴 0 求和,结果为 [4, 6](按行相加);沿轴 1 求和,结果为 [3, 7](按列相加)。

  • 示例
    import numpy as np
    arr = np.array([[1, 2], [3, 4]])  # 2x2 矩阵# 沿 axis=0(行方向)求和 → 压缩行,保留列
    print(arr.sum(axis=0))  # 输出:[4, 6](1+3, 2+4)# 沿 axis=1(列方向)求和 → 压缩列,保留行
    print(arr.sum(axis=1))  # 输出:[3, 7](1+2, 3+4)
    

4. 形状 (Shape)

  • 定义:描述每个维度的大小的元组。形状的元素数 = 维数/秩。形状是描述数组在每个维度上元素数量的元组,其长度等于秩。
  • 示例
    • 标量:()
    • 向量(3 元素):(3,)
    • 矩阵(2 行 × 3 列):(2, 3)
    • 三维张量(2×3×4):(2, 3, 4)
  • 获取方式ndarray.shape 属性。

  • 形状(shape)是一个元组,表示数组各维度的大小。例如:
    • 一维数组 [1, 2, 3] 的形状为 (3,)(1 个轴,长度为 3);
    • 二维数组 [[1, 2], [3, 4]] 的形状为 (2, 2)(2 个轴,每个轴长度为 2);
    • 三维数组 [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] 的形状为 (2, 2, 2)(3 个轴,每个轴长度为 2)。
  • 形状的元组长度等于数组的秩 。

属性与方法:

  • ndarray.shape:返回形状元组。
  • reshape():调整形状(需保证元素总数不变)。

5.关键关系总结

总结关系

  • 秩 = 轴的数量 = 维数(维度数)
  • 形状描述各轴的长度,其元组长度等于秩;
  • 用于指定操作的方向(如 axis=0 表示行方向)。

例如,一个形状为 (3, 4, 5) 的数组:

  • 秩为 3(3 个轴);
  • 轴 0 长度为 3,轴 1 长度为 4,轴 2 长度为 5 。
概念含义示例(数组 [[1,2],[3,4]]属性/方法
维数/维度数组的方向数量2 维arr.ndim
= 维数(轴的个数)2arr.ndim
维度的操作方向(编号从 0 开始)axis=0(行), axis=1(列)函数参数(如 sum
形状每个维度的大小(2, 2)arr.shape

6.可视化理解

         axis=0 (行方向 → 向下)↓
axis=1 →  [ [1, 2],   # 形状 (2, 2) 
(列方向)     [3, 4] ]  # 秩 = 2(2维)→

7.操作示例

import numpy as np# 创建一个 3 维数组(形状 2x3x4)
arr = np.random.rand(2, 3, 4)print("维数/秩:", arr.ndim)   # 输出:3
print("形状:", arr.shape)     # 输出:(2, 3, 4)# 沿 axis=0 求和(压缩第0维)
sum_axis0 = arr.sum(axis=0)  # 结果形状: (3, 4)# 沿 axis=1 求和(压缩第1维)
sum_axis1 = arr.sum(axis=1)  # 结果形状: (2, 4)

掌握这些概念能帮助您高效操作 NumPy 数组,尤其在数据科学和机器学习中处理多维数据时至关重要!

2、Numpy知识点

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

NumPy Ndarray 对象

  • NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
  • ndarray 对象是用于存放同类型元素的多维数组。
  • ndarray 中的每个元素在内存中都有相同存储大小的区域。
  • ndarray 内部由以下内容组成:
    一个指向数据(内存或内存映射文件中的一块数据)的指针。
    数据类型或 dtype,描述在数组中的固定大小值的格子。
    一个表示数组形状(shape)的元组,表示各维度大小的元组。
    一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。

维数、维度和轴(rank、dimensions、axis)

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

  • 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。
    很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

切片和索引:
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

  • 单轴索引
    索引从 0 开始编制
    负索引表示按倒序编制索引
    冒号 : 用于切片:start:stop:step
  • 多轴索引
    更高秩的张量通过传递多个索引来编制索引。对于高秩张量的每个单独的轴,遵循与单轴情形完全相同的规则。

在NumPy中,维度(Dimensions)、轴(Axes)和形状(Shape)是非常重要的概念,下面将详细介绍这些概念并给出相关示例。

概念解释

  • 维度(Dimensions):指的是数组的秩(rank),也就是数组嵌套的层数。例如,一维数组的维度是1,二维数组的维度是2,以此类推。
  • 轴(Axes):轴是数组的一个特定方向。在一维数组中,只有一个轴(轴0);在二维数组中,有两个轴,轴0表示行,轴1表示列;在三维数组中,轴0通常表示深度,轴1表示行,轴2表示列。
  • 形状(Shape):形状是一个元组,它表示数组在每个轴上的大小。例如,对于一个二维数组,形状元组的第一个元素表示行数,第二个元素表示列数。

示例代码

import numpy as np# 一维数组
# 创建一个一维数组
arr1d = np.array([1, 2, 3, 4, 5])
print("一维数组:")
print("维度:", arr1d.ndim)  # 维度
print("轴: 只有一个轴(轴0)")
print("形状:", arr1d.shape)  # 形状
print("-" * 30)# 二维数组
# 创建一个二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:")
print("维度:", arr2d.ndim)  # 维度
print("轴: 轴0表示行,轴1表示列")
print("形状:", arr2d.shape)  # 形状
print("轴0的大小(行数):", arr2d.shape[0])
print("轴1的大小(列数):", arr2d.shape[1])
print("-" * 30)# 三维数组
# 创建一个三维数组
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("三维数组:")
print("维度:", arr3d.ndim)  # 维度
print("轴: 轴0表示深度,轴1表示行,轴2表示列")
print("形状:", arr3d.shape)  # 形状
print("轴0的大小(深度):", arr3d.shape[0])
print("轴1的大小(行数):", arr3d.shape[1])
print("轴2的大小(列数):", arr3d.shape[2])### 代码解释
1. **一维数组**- `arr1d` 是一个一维数组,其维度为1,只有一个轴(轴0),形状为 `(5,)`,表示数组中有5个元素。
2. **二维数组**- `arr2d` 是一个二维数组,其维度为2,有两个轴(轴0和轴1),形状为 `(2, 3)`,表示数组有23列。
3. **三维数组**- `arr3d` 是一个三维数组,其维度为3,有三个轴(轴0、轴1和轴2),形状为 `(2, 2, 2)`,表示数组的深度为2,每个深度层有22列。通过这些示例,你可以更好地理解NumPy中维度、轴和形状的概念。

NumPy是Python的一个科学计算库,它提供了大量的多维数组操作和数学函数。以下是一些重要的NumPy知识点汇总:

1、二维数组:3行4列矩阵
a = np.array([[1,5,62,54], [2,6,2,6], [2,65,2,6]])
tensor([[ 1,  5, 62, 54],[ 2,  6,  2,  6],[ 2, 65,  2,  6]])2、三维数组,大小是2x2x3
a = np.array([
-----------------------------------------			[[1.5, 6.7, 2.4],[6.8, 3.4, 9.3]],
-------------------------------------------            				[[3.1, 6.5, 1.9],[8.9, 1.2, 2.5]]
---------------------------------------------])3、三维数组(3, 5, 2)
[[['参赛者A1' '国籍A1']['参赛者A2' '国籍A2']['参赛者A3' '国籍A3']['参赛者A4' '国籍A4']['参赛者A5' '国籍A5']][['参赛者B1' '国籍B1']['参赛者B2' '国籍B2']['参赛者B3' '国籍B3']['参赛者B4' '国籍B4']['参赛者B5' '国籍B5']][['参赛者C1' '国籍C1']['参赛者C2' '国籍C2']['参赛者C3' '国籍C3']['参赛者C4' '国籍C4']['参赛者C5' '国籍C5']]]

基础概念

  • ndarray:NumPy的核心数据结构,即n维数组对象。它是一个由相同类型的数据元素组成的多维数组,具有固定的大小和形状。
  • 轴(axis):在ndarray中,轴是指数组的维度。例如,一维数组有一个轴,二维数组有两个轴(通常称为行和列),三维数组有三个轴等。
  • 形状(shape):表示数组在每个轴上的元素数量,是一个元组。例如,二维数组的形状可能是(3, 4),表示有3行4列。
  • 数据类型(dtype):ndarray中的元素的数据类型,如整数、浮点数、复数、布尔值等。

创建数组

  • array函数:最常用的创建数组的方法,可以从Python的列表、元组等序列类型创建NumPy数组。例如:np.array([1, 2, 3, 4])
  • zeros、ones、empty函数
    • zeros:创建一个全为0的数组,如np.zeros((3, 4))创建一个3行4列的全0数组。
    • ones:创建一个全为1的数组。
    • empty:创建一个未初始化的数组,其内容是内存中的随机值。
  • arange函数:类似于Python的range函数,用于创建一个指定范围的数组。如np.arange(0, 10, 2)创建从0开始,以2为步长,小于10的数组。
  • linspace函数:用于创建一个在指定范围内均匀分布的数组。例如np.linspace(0, 1, 5)会在0到1之间创建5个均匀分布的数。

数组操作

  • 索引和切片
    • 索引:与Python列表类似,可以使用索引访问数组中的元素。对于二维数组,如arr[i][j]arr[i, j]都可以访问第i行第j列的元素。
    • 切片:可以对数组进行切片操作,获取子数组。例如arr[1:3, 2:4]表示获取第1到2行,第2到3列的子数组。
  • 形状操作
    • reshape:用于改变数组的形状,如arr.reshape(2, 3)将数组重塑为2行3列。
    • transpose:用于转置数组,对于二维数组,它会交换行和列。也可以使用T属性,如arr.T
    • ravel:将多维数组展平为一维数组。
  • 拼接和拆分
    • concatenate:用于拼接数组,可以沿指定轴将多个数组合并为一个数组。
    • split:用于将数组拆分成多个子数组,可以指定拆分的位置或份数。

数学运算

  • 基本运算:NumPy数组支持各种数学运算,如加法、减法、乘法、除法等。这些运算都是元素级别的,即对应元素进行运算。例如arr1 + arr2将两个形状相同的数组对应元素相加。
  • 统计函数
    • sum:计算数组元素的总和,可以指定轴进行计算,如arr.sum(axis=0)计算每列的和。
    • mean:计算数组元素的平均值。
    • maxmin:分别返回数组中的最大值和最小值。
    • stdvar:分别计算数组的标准差和方差。
  • 矩阵运算
    • dot:用于矩阵乘法,如np.dot(A, B)计算矩阵AB的乘积。
    • linalg模块:提供了许多线性代数相关的函数,如求逆矩阵np.linalg.inv(A)、求解线性方程组np.linalg.solve(A, b)等。

广播机制

  • 当对形状不同的数组进行运算时,NumPy会尝试自动进行广播,以使它们的形状匹配。广播的规则是从数组的最后一个维度开始,依次向前比较。如果两个数组在某一维度上的大小相同,或者其中一个数组在该维度上的大小为1,则可以进行广播。例如,一个形状为(3, 1)的数组和一个形状为(1, 4)的数组可以广播为形状为(3, 4)的数组进行运算。

随机数生成

  • random模块提供了各种生成随机数的函数。
  • rand:生成均匀分布的随机数,如np.random.rand(3, 4)生成一个3行4列的均匀分布随机数数组,取值范围在0到1之间。
  • randn:生成服从标准正态分布的随机数。
  • randint:生成指定范围内的随机整数,如np.random.randint(0, 10, (2, 3))生成一个2行3列的随机整数数组,取值范围在0到9之间。

参考

深度学习架构参考:https://blog.csdn.net/weixin_44986037/category_12271357.html
https://www.runoob.com/numpy/numpy-dtype.html

http://www.xdnf.cn/news/9977.html

相关文章:

  • Cesium 8 ,在 Cesium 上实现雷达动画和车辆动画效果,并控制显示和隐藏
  • 提示词优化技巧
  • 【Java】线程池的实现原理是怎样的?CPU密集型任务与IO密集型任务的区别?
  • Java基础面试题--jdk和jre的区别
  • openbmc kvm vnc client connection
  • 四、若依从数据库
  • 【JavaWeb】基本概念、web服务器、Tomcat、HTTP协议
  • 数据结构数组总结
  • 大模型调用数据库表实践:基于自然语言的SQL生成与数据查询系统
  • 石油炼化厂融合定位系统人员管控解决方案
  • 阿里云服务器ECS详细购买流程【新手购买手册】
  • 小白的进阶之路系列之六----人工智能从初步到精通pytorch数据集与数据加载器
  • 学习STC51单片机20(芯片为STC89C52RCRC)
  • Webug4.0靶场通关笔记03- 第3关SQL注入之时间盲注(手注法+脚本法 两种方法)
  • 字体查看器
  • C学习-头文件
  • iVX 如何用 VL 中间语言构建程范式闭环?
  • [SC]SystemC语法小结(一)
  • Linux部署python项目为服务,开启自启动
  • 上传图片转成3D VR效果 / 用photo-sphere-viewer实现图片VR效果 / VR效果在项目中落地实践
  • WebBuilder赋能中山欣锠鞋业数字化转型实践
  • Web 系统验证码与登录安全防护全攻略(附实现方案)
  • The CTeX fontset “fandol“ is unavailable in the current mode.
  • 复合机器人:纠偏算法如何重塑工业精度与效率?
  • AET3156AP电源方案 禾纳代理商
  • 1.什么是node.js、npm、vue
  • vue3 各种数据处理
  • Spring 核心知识点补充
  • 文档处理的相关工具
  • MMR搜索和LangChain整合Milvus实战