numpy 中关于轴和维度

2024-01-07 21:12:49

准备:

开始将轴之前先给大家讲下np.reshape() 函数

numpy.reshape() 函数是numpy 中用于改变数组形状(维度)或大小的函数,你可以给它传入一个元组,它会帮你想成新的形状的数组。 重要一点是,传入数组元素相乘的积必须等于数组集合元素的个数?。

numpy.reshape(xxx)? 函数接受一个元组, 这个元组用来表示数组集合的轴方向以及隐含维度。

我先讲下,我对这些专有名词的理解:

数组形状:描述这个数组的样式,详细点说: 是一个多维数组在各个维度上元素数量的元组。它定义了数组的数据结构,即有多少行、多少列以及在更高维度中如何组织数据。

元组:是Python中一种数据结构,单位元素之间用逗号分隔,可以包含用来存储任何类型的数据,但是其中的元素内容不可以改变,即无法添加 删除? 修改?

示例: (2,3,4,)

传入数组元素相乘的积必须等于数组集合元素的个数:

下面这是一个 2 x? 2 x 3? 的三维数组

其中? ?(2 x? 2 x 3) 就是我在前面提到的,数组形状,这个数组积是 12 , 而数组共有12个元素,说白了 向reshape() 函数传入的这个元组 定义这个数组的形状,它应有多少行多少列,行和列组成了表格,存在多少个表格。

示例代码:

# 环境: python 3.9? ?版本无所谓,一般不会涉及这么细致,只要是3.0往上的大版本

# jupyter notebook? :轻量级交互式科学计算的笔记本?

a = [1,2,3,4,5,6,7,8,9,10,11,12]
array ?= np.array(a)
array.reshape(2,2,3)

?我给大家看一个图大家就明白三维数组的维度是怎么回事了,到时候对它做索引 切片 转换,就明白了,它为什么成为这个样子。

?上述示例图表现了一个??(3,2,3)的三维数组,这个三维数组包含了三个二维数组,其中一个二维数组包含了两个一维数组,我们可以这样理解 : 一维数组只包含行,二维数组包含行和列,三维数组是包含行 和列 和 深度。 一维 二维数组? 大家很容易理解,看二维表就很容易理解:

三维数组的这个深度,我们可以这样想深度就想象成垒砖,而这个砖呢? 就是每一个二维表。

三维数组就是将每一个二维数组垒起来,产生立体感。

二维表的行很容易理解,而列也不好理解, 因为它是这样的一个样式:

最外层的中括号影响大家和我的理解,它为什么是这样一个样式,大家不用管它只看离数据最近的这个括号和数据。

不知道大家理解我上面说的没有。 下面我说多维数组的轴,以三维为例我的能力目前就在三维,四维是怎样的抽象空间我也想不明白。

切片: 三维数组就是一个长方体,或者立方体? ,你像香肠一样,从中切出一片,这一片就是切片。

axis(轴):

axis(轴) 用于定义多维数组的轴或维度。

axis = 0? ? ? 表示数组最外层的维度? ? ? 如果以三维数组为例 它就是 深度

axis = 1? ? 表示在每个二维矩阵中 沿着行的方向

axis = 2? ? 表示在每个二维矩阵(切片) 中沿着列的方向

以上这样思想对于理解:这样一个二维矩阵比较有用,我待会换一个就不好用了。

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

  [[ 7,  8,  9],
  [10, 11, 12]]]

我们用shape 函数查看下这个数组的形状

其中 axis = 0 表示第1个维度? ?表示在? (2,2,3)中? 控制着第一个元素 2 的位置,axis= 1?表示第二个维度, 控制着第二个元素 2 的位置变化,? axis = 3? ? 表示第三个维度 控制着元素3 的位置变化。?(2,2,3)? 中的元素只是表示在每个方向大小或者多少, 我现在说是这个这个元素的占位也就是位置。还有这个占位代表这那个方向。

我们来看下难度更大的三维数组:

[[[1, 2, 3], [4, 5, 6]],
?[[7, 8, 9], [10, 11, 12]],
?[[13, 14, 15], [16, 17, 18]]]?

这是一个 3? x? ?2? ?x? ?3? ?的三维数组 。

那它们之间的区别呢?? ???(2,2,3)? ? (3,2,3),显然是?(3,2,3)比?(2,2,3)? 多个一层,怎么理解: 以?(3,2,3)? 为例? ,首先我们一看,奥这个表示数组形状的元组,共有三个元素,那就是表示 三维数组, 从里面详细看, 这个数组形状中的第一个元素 3 ,向大家说明了,奥 我这个三维数组有三个二维数组,这个数组形状中的第二个元素 2 向大家说明了,奥 我这个三维数组中的二维数组,包含了两个一维度数组,这个数组形状中的第三个元素 3, 向大家说明了这个三维数组,中的二维数组,中的一维数组中,共有三列。

如何区分数组个数:(以下图数组为例)

区分数组个数, 面对多维数组我们要从最里层,最小维数组去看, 例如上图是一个三维数组, 最小维度数组应该是一维数组,一位数组长什么样子??

[ 1,  2,  3]   类似 python中的列表,这个一维数组共有三列

?再去次最小维数组去看(紧贴着一维数组的外层)

这个?紧贴着一维数组的外层的括号,包含了 两个一维数组

再去次次最小维数组去看,近贴着二维数组中括号的外层

这个?紧贴着二维数组的外层的括号,包含了 两个二维数组?:

如何作区分根据中括号的数量来作区分,它是几位数组,最外层就有几个括号如果是三位数数组,最外层肯定有三个中括号, 那这个三维数组中有几个二维数组,还是看括号,它的最外层有两个中括号,我们看这个三维数组中的有两个中括号括起来的。

sum 函数 加深我们对多维数组轴方向的理解:

在 numpy 中 , 以三维数组为例,numpy.sum.()函数可以用对数组沿着指定轴进行求和操作, 例如有一个三维数组 A ,形状是(x,y,z) , 你可以通过设置 axis 参数来控制求和的方向。

我们拿个有难度三维数组玩:

A = np.array([[[1, 2, 3], [4, 5, 6]], 
              [[7, 8, 9], [10, 11, 12]], 
              [[13, 14, 15], [16, 17, 18]]])

?

?sum函数沿着数组指定的轴进行加法求和, axis 用于指定轴方向? axis = 0 是沿着纵深 也就是切片、层,每个层相对应的元素计算:

给大家上图:

?

这下明白我说的垒砖了吧。

axis = 1 axis = 2? ,我没有办法理解: 我在网上copy的大家可以看看

在NumPy中,对三维数组(或者其他多维数组)使用 numpy.sum() 函数并设置 axis=1 参数时,将会沿着第二个维度进行求和操作。对于一个三维数组 A,其形状为 (x, y, z):
import numpy as np

# 假设有一个三维数组
A = np.array([[[1, 2, 3], [4, 5, 6]],?
? ? ? ? ? ? ? [[7, 8, 9], [10, 11, 12]],?
? ? ? ? ? ? ? [[13, 14, 15], [16, 17, 18]]])

# 沿着第二个维度(y轴)求和
sum_axis_1 = np.sum(A, axis=1)

# 这将得到一个新的二维数组,形状为 (x, z)
# 每一行的元素是原数组对应行(同一 x 下)的所有列(y)的元素之和
在这个例子中,sum_axis_1 数组的结果将是:

code
array([[[ 5, ?7, ?9],
? ? ? ? [17, 19, 21]],

? ? ? ?[[29, 31, 33],
? ? ? ? [41, 43, 45]]])
这里每一行 [...,...] 是原数组某一层(x坐标不变)所有列(y坐标变化)的元素之和。

?


非常感谢各位同僚网友的支持,小马一如既往会将自己所学,深入理解后的一切分享给大家

祝愿大家在新的征途上走的更远更高

送大家一些古语:

余幼时即嗜(shì)学。家贫,无从致书以观,每假借于藏书之家,手自笔录,计日以还。天大寒,砚冰坚,手指不可屈伸,弗之怠(dài)? ? -- 送东阳马生序

?我年幼时就爱学习。因为家中贫穷,无法得到书来看,常向藏书的人家求借,亲手抄录,约定日期送还。

文章来源:https://blog.csdn.net/weixin_59131972/article/details/135394711
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。