2022-02-18

求索集 第一

求索集 第一

“路漫漫其修远兮, 吾将上下而求索”.

拜义务教育所赐, 现今中国人无论男女老少, 基本都知道屈原, 知道他的这句诗, 知道他的情怀, 他的精神. 更知道他带给每个中国人的三天假期…

今年开始我尝试把自己的写作归入几个主题, 让随性而至有感而发变得更有逻辑和调理. 之前把闲扯淡聊闲天侃大山命名为”寄花集”, 寓意为寄托思绪, 今天开始的”求索集”则斗胆学习先贤的”求索”精神, 把自己的学习心得整理在此.

于是今天就是”求索集”开篇第一集.

Windows Server Dev 25057 小用手记

最近微软推出了Windows 11的最新开发版本 22557, 增加了不少新功能, 而基于Windows 11构建的服务器开发版则是直接把版本推到了25057. 我也试着把手里这个在家用的机器从服务器开发版22538升级了上来. 升级过程非常顺利, 而且是无损升级, 所有文件设置和程序都得到了保留:

Windows Server 25057 Windows Server 25057 Windows Server 25057

安装界面显示服务器版本依然是Windows Server 2022.

既然比Windows 11最新开发版版本号还高, 那么理论上这次Windows 11支持的新特性应该也有了, 咱们试试看.

第一部分, 全新设计的任务管理器:

Windows Server 25057 Windows Server 25057

以前标签页形式的任务管理器被替换为更现代的汉堡包式菜单, 看起来好看了不少, 设置项也更多. 除了外观, 这次还多了一个功能, 设置单独的程序进入ECO模式:

Windows Server 25057

我看微软的解释是, 用户可以手动控制某些程序进入节能模式, 这样会把更多资源节省出来用于其它, 进入节能模式的程序反应会变慢. 嗯, 这个应该是在针对移动设备的, 有利于续航. 当然有一些程序和系统进程这里是灰色不可用的, 估计应该是关键进程. 奇怪的是浏览器也不能进入节能模式, 难道系统检测到了我的浏览器在干什么??? 另外有无可能反其道而行之, 来个”野兽”模式或者”飙车”模式, 让程序获取更多资源从而能更快完成任务?

第二个新功能对我来说特别有用, 就是全新的专注模式.

Windows Server 25057

只要点一下右下角的任务栏, 然后点击Focus按钮, 系统就会进入专注模式, 这时各种聊天软件再也不会提示你有新邮件, 也不会有什么通知弹窗. 默认进入一次专注模式的时间是30分钟, 也符合番茄时间理论倡导的25分钟. 对了, 这里我也推荐一下番茄时间学习工作法, 确实是提高效率的有效手段, 方法很简单, 设定一个时间段, 一般是25分钟, 然后立刻开始做你第一个想到的事情, 期间不看手机不看网页电话不接微信不回, 就坚持25分钟即可. 然后你会发现这25分钟的专注带来的不仅是高效率, 更是一种淋漓尽致的爽快感和成就感. 普通人, 做着普通的事情, 但是如果能一点点积累成就感, 短时间就会感受到不同的, 哪怕处境和环境其实没什么变化, 但是心境会变化. 全新的专注模式, 好评!

Windows Server 25057

下一个新特性有点让人哭笑不得, 就是之前Windows 10的开始菜单支持文件夹功能这次找回来了… 好吧, 砍掉一个功能算一个更新, 然后把这个功能再找回来又算一个更新, 想提高自己KPI的朋友们, 你们学废了吗?

第三个新功能是多任务布局引入了一个新的方法, 可以拖动程序窗口到桌面顶部, 然后就可以指定窗口显示的位置, 倒是挺方便.

Windows Server 25057

这次推出的新功能还有不少, 比如播放视频时系统能够自动匹配字幕. 当然目前这个功能只限于英语, 所以经常看日语方面视频的朋友可能还得等等, 当然了我知道其实你们不需要字幕也不耽误理解剧情…

总体来说 25057是个不错的更新, 据说这些变化会在下半年的Windows 11 正式版上得到体现, 请拭目以待 ~~~

多维数组切片研究

利用Python进行数据分析依然在缓慢地学习中, 进度缓慢, 但力争持续和领悟. 目前因为还没进入数据分析的核心部分, 仅仅是在学习基础预备知识, 不过一些东西还是挺好玩儿的, 比如多维数组切片.

所谓多维数组切片, 我目前的理解是按照某些需要, 把一个多维数组中的某些元素给挑出来. 这些元素可能是连续的, 可能是离散的.

比如先来个最简单的一维数组:

1
2
3
4
5
import numpy as np
array1 = np.arange(12) #构建一个一维数组
array1
输出为:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

一维数组情况最简单, 只要记得一维数组是一根线段 (应该说是矢量, 因为除了有长度还有方向), 切片就是从这根矢量线段上切下来的若干部分线段或者点.

1
2
array1[5:8] #输出结果array[5,6,7]. 数组切片左含右不含我始终记不住, 还是得多用.
array1[3:] #输出3号以后的所有元素 array([ 3, 4, 5, 6, 7, 8, 9, 10, 11])

还得注意, 数组切片结果还是数组, 哪怕只有一个元素. 一维数组切片结果还是一维, 这个很好理解, 一根线怎么切要么还是线要么是点, 不可能切出一个平面或一个立体形状

二维数组切片稍微复杂一点, 比如这样的二维数组:

二维数组

显然, 二维数组切片要么是点, 要么是线(矢量), 要么还是个平面. 理解了这些,其实具体怎么切片就不难操作了. Python numpy 完全是按照平面坐标来定位元素的.

比如某种需要 切出来5,6,8,9这个平面, 那么注意一下这几个点的坐标分别是(1,1),(1,2),(2,1),(2,2), 是的, numpy是以1为原点, 向下向右增长的. 知道了原理, 下面就是拿出西瓜刀, 切了它!

1
2
3
4
5
6
import numpy as np
array2 = np.array([[1,2,3],[4,5,6],[7,8,9]]) #定义二维数组. 变量名跟着前面顺延为array2. 我起名一向随意, 当然这也让我吃过大亏, 以后慢慢说.
array2[1:,1:] #逗号前是行, 逗号后是列, 就是取第1行和第1列开始的所有行列. 这里的第1行其实是第2行, 毕竟计算机语言都是从0开始, 计算机本来就是1010的世界, 说起来羞羞哒...
输出为:
array([[5, 6],
[8, 9]])

好了,下面就是三维数组了. 三维, 立体了, 摸起来, 不是, 切起来有质感了, 来来来, 拿起西瓜刀, 咱们接着切!

先看看三维数组长什么样:

三维数组

话说用PPT画三维数组, 简直神器, 哦耶. 我就喜欢这种拿现成工具开发别的姿势的感觉. 话说怎么又有种要开车车的感觉呢…

我之前搜索三维数组的相关知识, 很多前辈把三维数组描述成魔方的样子, 但是这里有个问题就是如果三维数组的秩 (其实就是有多少”片”纸, 比如上图的秩就是3) 多了, 那就不好弄了. 所以我自己的理解是, 三维数组就是在一个空间里平行分布的几个平面, 每个平面都是一个二维数组.

那么现在切西瓜就简单了, 只要您告诉我您要第几个平面上的元素, 那就好切了. 比如我要 27, 28, 29三个元素, 嗯嗯, 那不是在2号平面吗 (别忘了计算机编程都是从0开始, 不知道别的是不是也是从当0开始~~~)

1
2
3
4
5
6
7
import numpy as np
array3 = np.array([[[1,2,3],[4,5,6],[7,8,9]],
[[11,12,13],[14,15,16],[17,18,19]],
[[21,22,23],[24,25,26],[27,28,29]]]) #定义三维数组. 好了不解释了, 你就是三号变量. Python numpy定义二维和三维数组的语法我一开始是真晕, 后来用习惯了觉得还挺科学的. 只能说搞编程的都是逻辑大神, 服了, 真得
array3[2, 2, :] #第一个逗号前面是秩,就是第几片,第二个逗号前是行, 第三个逗号前是列, 光一个:表示我全都要.
输出为:
array([27, 28, 29])
多维数组转置研究

研究完切片, 下面研究转置. 一维数组转置不转置的完全不吃劲, 一条线怎么折腾它还是一条线.

二维数组也不难理解, x轴变y轴, y轴变x轴而已.

三维数组还是得研究研究的, 还是请出我们的超级无敌3D大数组:

三维数组

话说看着这个图我是懵B的, 三维的怎么转置? 话我我要是一个三维数组, 我就活生生站在这里, 现在有人要转置我, 我应该怎么办? 我是躺下, 还是蹲着? 躺下的话, 是侧躺, 还是仰着头?

最直观的办法还是把结果跑出来看看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import numpy as np
# 定义一个三维数组, 请继续原谅我给变量起名的能力
arr3d = np.array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],

[[ 11, 12, 13],
[ 14, 15, 16],
[ 17, 18, 19]],

[[ 21, 22, 23],
[ 24, 25, 26],
[ 27, 28, 29]]])
# 转置
arr3d.T
输出结果为:
array([[[ 1, 11, 21],
[ 4, 14, 24],
[ 7, 17, 27]],

[[ 2, 12, 22],
[ 5, 15, 25],
[ 8, 18, 28]],

[[ 3, 13, 23],
[ 6, 16, 26],
[ 9, 19, 29]]])

哈哈, 这下明白了, 三维数组的转置, 大概就是, 把每个平面的第一列给取出来, 然后按照平面0-1-2的顺序把每个平面的第一条给拼上, 然后是每个平面的第二条, 第三条…. 以此类推.

可以发现, 三维数组的转置并没有改变每个平面的元素之间的xy轴关系, 原数组的列在新数组依然得到了保存, 而有一把超级西瓜刀劈开了每个平面, 使得每个平面的具有相同编号的列元素被重新组合在一起. 现实意义我是这么尝试的, 假设有这么一个图书馆, 有三个书架, 每个书架有三层, 每层都是一个专业的书籍, 那么这个书架是如此定义的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import numpy as np
# 定义一个图书馆的书架数组
arr3d4 = np.array([[['语文1', '语文2', '语文3'],
[ '数学1','数学2','数学3'],
[ '英语1', '英语2', '英语3']],

[['生理卫生1', '生理卫生2', '生理卫生3'],
[ '化学1','化学2','化学3'],
[ '自然1', '自然2', '自然3']],

[['生物1', '生物2', '生物3'],
[ '美术1','美术2','美术3'],
[ '音乐1', '音乐2', '音乐3']]])
# 转置
arr3d4.T
输出结果为:
array([[['语文1', '生理卫生1', '生物1'],
['数学1', '化学1', '美术1'],
['英语1', '自然1', '音乐1']],

[['语文2', '生理卫生2', '生物2'],
['数学2', '化学2', '美术2'],
['英语2', '自然2', '音乐2']],

[['语文3', '生理卫生3', '生物3'],
['数学3', '化学3', '美术3'],
['英语3', '自然3', '音乐3']]], dtype='<U5')

哈哈, 是不是一目了然了? 转置后的图书馆把每个科目的书都按顺序挨个抽出来放在一起, 以前是按类别放书, 转置后则是按书的顺序排列, 转置在三维数组里就拥有了实际意义.

刚刚学习多维数组, 为了避免陷入纯概念性的东西, 我试图通过结合实际生活来理解, 因此目前我只理解到三维数组, 毕竟三维是评价女生身材的… 不是, 是我一个三维生物能理解的极限, 四维或再网上我就不能理解了, 再研究也就是完全靠生磕, 这不太符合我这个年龄段的学习方式了.

希望今天给求索集这个序列开了个还可以的头儿. 继续加油.