2022-01-29

形象理解Numpy中的三...

形象理解Numpy中的三维数组

从2021年4月1日开始尝试用Blog记录自己的想法以来, 这是整整第50篇, 算下来应该有十万字了. 今天是除夕, 那么, 就用写作的方式, 为自己的牛年画上一个句号吧.

自从决定要开始走上终身学习的道路以来, 我收获了不少, 也是失去了一些. 总体来说, 眼界提高, 思路扩宽, 学会了很多好用的工具, 做了更多好玩儿的事情, 虚度光阴的感觉慢慢远去, 这种感觉还是挺好的. 学习道路上最开心的一件事是, 大学时期学过的C语言和Java一塌糊涂, 让我以为自己的脑子学不了编程, 直到接触Python以后, 简单明了的语法, 贴近自然的语言, 结合对工作和生活中遇到的问题的总结整理, 让我能真正接触到了一门计算机语言, 而且确实能帮我解决实际的问题, 这也让我有兴趣继续学习研究Python的具体应用, 比如它最擅长的数据分析领域.

自从重新开启学习之路的时候, 我发现和以前上学时期最大的不同, 就是抽象思维能力退化了. 以前可以凭空理解一些无法具象化的概念和知识体系, 比如微积分. 现在发现, 我已经很难再具有这样的能力. 各种符号, 各种变量, 各种函数必须要和实际挂钩, 才能理解真正的含义. 但是好处是, 学习效率更高, 目的性更强, 和实际问题结合的更好. 比如编程, 我现在开始明白了:

计算机语言并非凭空创造, 仅仅是对现实世界的逻辑化抽象

学习Python数据分析时间尚浅, 我依然处在对基础概念的准备阶段, 而这段时间, 我也一直在摸索着了解数组的概念, 毕竟数组是Python数据分析的基础. 下面我总结一下我对一维到三维数组的理解.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 一维数组
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 二维数组
array([[1, 1, 1],
[2, 1, 2]])
# 三维数组
array([[[2, 5, 7],
[2, 8, 2],
[3, 6, 4]],

[[7, 3, 3],
[2, 1, 1],
[7, 6, 6]],

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

如果按照一般的学习思路, 应该是如何用[]和,去表示数组的维度和元素,然后学习用:去切片获得数组中的某些元素, 但是经过尝试, 我的抽象思维能力让我很难去凭空理解这一切都是在干什么, 于是, 我尝试结合几何的概念来理解, 毕竟, 几何图形好歹是看得见的东西.

一维数组最简单, 线而已. 数组元素的个数, 或者说数组的长度就是这条线的长度, 怎么样, 抽象的概念直接就变成看得见摸得着的图形了.

二位数组也很简单, 平面. 下面就是二维数组

1
2
array([[1, 2, 3],
[4, 5, 6]])

的图形形式.

二维数组

如果引入坐标, 那么元素1就是(0,0), 6 就是(1,2). 至于为什么不是(1,1)和(2,3), 嗨, 计算机算数不是都要从0开始么, 可能计算机有点弯吧…

这里最难理解的其实是三维数组. 一开始, 我是用下面的形式理解三维数组:

三维数组

看起来似乎挺简单, 但是我发现这样导致我把三维数组给二维化了, 虽然对数组的操作都是对的, 但这样不利于我理解三维数组, 所以, 还是让三维数组丰满起来吧, 毕竟谁不喜欢丰满的呢…

三维数组

看到了吧, 所谓的三维数组, 可以理解为在一个立体的空间里, 有N张平行的平面, 每个平面都是一个二维数组. 这有点像图书馆的感觉. 书架的每一层都是一个一维数组, 一个书架就是若干层组成的二维数组, 不同的书架组成了一个三维数组, 我想, 三维数组的初步概念, 差不多也就是这样了. 后续可以通过做一些切片练习, 来更熟悉三维数组的概念, 比如, 我如何获得上面这个三维数组的[8,11]两个元素? 这就相当于我如何让温柔可爱萌萌哒图书馆管理员小姐姐帮我从书架上把书取下来? 然后借机再要个微信什么的, 然后…

跑题了, 大概就是这个意思. 三维数组确实是我学习Python数据分析遇到的第一个坎, 通过这个例子我确实明白了, 人不能跟自己过不去, 别难为自己, 不同的人生阶段有不同做事的方法, 承认现实, 寻求方法, 总有突破. 比如, 我虽然大概弄明白了三维数组的概念, 但如果是这么一个三维数组呢:

array([[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]])

奇怪的三维数组

当时我其实有点懵, 这不就是一个一维数组么, 怎么又成了三维的了? PS的好身材你骗谁呢? 照例, 数形结合, 画图说明, 这才明白, 人家确实是个三维数组, 只是碰巧这个图书馆只有一个书架, 这个书架只有一层, 这层被分割为4段, 每段放了4本书. 事情的真相就是如此, 哦耶.

话说对多维数组的理解暂时告一段落了, 那为什么我不去理解四维或更高维数组? 因为我的人生经历导致我无法理解三维以上的世界, 更没法把这些概念和我认识的现实加以联系, 所以, 就这样吧, 真遇到问题再说, 反正也没考试考我这个了, 毕业的好处立刻展现, 哈哈.