numpy 中关于轴和维度

本文详细解释了numpy.reshape函数的作用,用于调整数组的维度,强调了传入元组的重要性,以及如何通过轴值理解多维数组的结构。同时介绍了numpy.sum()函数在多维数组求和的应用,特别是沿不同轴方向的操作。
摘要由CSDN通过智能技术生成

准备:

开始将轴之前先给大家讲下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)    -- 送东阳马生序

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值