1 示例
直接上代码。
def npy1():
"""
一维数组
"""
arr = np.array([1, 2])
print(arr)
print(arr.ndim)
"""
[1 2]
1
"""
"""
类似列表。
一维数组不包含行列信息,本质为线性序列,即元素按索引顺序连续存储。
"""
"""
二维数组
"""
arr = np.zeros((3, 2), dtype=int)
print(arr)
"""
[[0 0]
[0 0]
[0 0]]
"""
"""
二维数组类似列表套列表,也允许只套1个列表,[[1, 2]],该二维数组形状为(1, 2),一行两列。
验证下:
"""
arr = np.array([[1, 2]])
print(arr.shape)
"""
(1, 2)
如何理解(3, 2)和(1, 2)的区别?
维度:都二维。
区别:维度所表示数据特征的数量。
讲故事。
用该二维数组表示(人名, 学科)模型。
(3, 2)和(1, 2)这两组数据:“学科”数量一样,比如都用来表示“语文/数学”,但并不能保证就一定是“语文/数学”,只能看出数量一样,或许是“物理/化学”呢。
“人名”有巨大差别。(3, 2)这组数据可表示三个人,比如“张三/李四/王五”,(1, 2)只能表示一个人,比如“张三”,或者“赵六”。
因为后者在“人名”维度只设置允许一个特征值。
小结:把每个维度当成一个小包装单元,至少有两个属性:1)可以包什么东西;2)可以包多少个。五字简记:“包啥包多少”。
二维数组的组成单元,或行或列的一维数组,是“煎饼制作材料”。
二维数组整体(把“煎饼制作材料”笼络起来)形成平面,做出一张“煎饼”。
"""
"""
三维数组
"""
"""
三维数组类似列表套列表套列表。
“煎饼最小包装单元”。几张煎饼放一起,形成独立小包装。
"""
"""
四维数组
"""
"""
arr = np.zeros((4, 5, 3, 2))
①是四维数组(给定形状元组共 4 个数)。
②看(3, 2),二维数组,三行两列,把“煎饼制作材料”笼络起来形成一张“煎饼”平面。
③几张煎饼放一个小包装里?五张,“煎饼最小包装单元”。
这五张煎饼装到一个塑料袋里,作为一个小包装。称“煎饼最小包装单元”。
④到四维了,形状数字为 4 ,为了装“煎饼最小包装单元”,又套层袋子。
该四维数组长这样:
"""
arr = np.zeros((4, 5, 3, 2))
print(arr)
"""
修改输出格式以便理解。
"""
"""
[
[
[
[0. 0.]
[0. 0.]
[0. 0.] ← 三行两列,三个一维数组,一张煎饼制作材料
] ← 第一张煎饼,1/5,二维
[
[0. 0.]
[0. 0.]
[0. 0.] ← 三行两列,三个一维数组,一张煎饼制作材料
] ← 第二张煎饼,2/5,二维
[
[0. 0.]
[0. 0.]
[0. 0.] ← 三行两列,三个一维数组,一张煎饼制作材料
] ← 第三张煎饼,3/5,二维
[
[0. 0.]
[0. 0.]
[0. 0.] ← 三行两列,三个一维数组,一张煎饼制作材料
] ← 第四张煎饼,4/5,二维
[
[0. 0.]
[0. 0.]
[0. 0.] ← 三行两列,三个一维数组,一张煎饼制作材料
] ← 第五张煎饼,5/5,二维
] ← 以上是五张煎饼,装在一个独立小包装中,称“煎饼最小包装单元”:三维(5, 3, 2)
我们用“煎饼”和“煎饼包装袋”类比各维数组。
这里“煎饼”想像成薄薄“一张纸”,是个“平面”,不是叠了好几层那种。
"""
"""
一维数组:
可以是一个或多个一维数组,类似作为“煎饼制作材料”的面粉啊、胡萝卜丝啊等等。
"""
"""
一个二维数组:
把“煎饼制作材料”笼络起来,做“煎饼”,形成一张“煎饼”平面。
二维数组如果三行两列,形状可写作(3, 2)。
这样也可以卖,但人手能直接接触“煎饼”,不卫生,下边我们给它裹起来。
"""
"""
一个三维数组:
裹一张或多张“煎饼”,是“煎饼最小包装单元”。
形状比如为(1, 3, 2),这是一张“煎饼”作为一组装了一包。
也可以是(5, 3, 2),五张“煎饼”作为一组装了一包。
在“散装称重零售区”这样的包装其实已经可以卖了,人手不能直接接触“煎饼”,卫生不成问题。
关于维度增加:
五张煎饼,不管是一层压一层平着放,还是一层贴一层竖着放,都不可能在二维平面内实现,只能升维,于是到了三维。
摞的方式涉及“行优先存储”和“列优先存储”,我们暂且不管(Python 默认“行优先存储”)。
或者这样理解,五张煎饼当作一个整体处理,必然包在一层包裹里,这个“煎饼最小包装单元”,就是个三维数组。
有人抬扛说没用包裹,左手两根手指捏着让五张煎饼成为一个整体的,右手同样这么干,这不也可以区分为“两件”售卖单元?
那你这左右手两根手指的“压力”也算一层包裹,不然怎么可能成为一个整体的?
"""
"""
一个四维数组:
常见“超市销售包”。
在“煎饼最小包装单元”外面又套个包装,装一个或多个“煎饼最小包装单元”。
到四维数组,生活中比较常见了,超市里卖的食品很多都这样包装:一个外包装装几个小袋,每个小袋又装了一片或几片吃的。
这样的一个四维数组可称“超市销售包”。
形状类似:(1, 5, 3, 2),从里往外说,五张“煎饼”作为一组装在最内层包装袋里,这样的一个小包装外边又有层包装。
这么装有点浪费最外层包装袋哈,还容易被说成“过度包装”。
调整下,可装成(6, 5, 3, 2),一个最外层包装袋装了六个小包装,每个小包装有五张“煎饼”,总共三十张“煎饼”,这样才是个像样的“超市销售包”。
超市里有很多这样的包装,零散存在(没装在固定外包装中),可写作:n个(6, 5, 3, 2),其中,n 大于等于 1 ,n 属于整数集。
注意这个“n”是在形状元组(6, 5, 3, 2)外边的,虽然这“n”个家伙长得都一样,但并不是一组,零散存在,没有被约束。
超市老板查库存的时候,想看余货几件,这里“几”对应于“n”。
"""
"""
一个五维数组:
超市进货的时候,可能用“大批发包”装多个“超市销售包”,这样方便装卸啊,卸车时雇人拆开最外层包装再上货架单卖。
多了层包裹,五维了。
如果一个“大批发包”装十个“超市销售包”,可写作:(10, 6, 5, 3, 2)。
这个五维数组,我们从外到内说:
axis=0 这个维度(拆开最外一层看到的)的形状为 10 ,最外层包装被拆开扔掉后,得到 10 个小包装。
axis=1 这个维度形状为 6 ,意思是如果把上述 10 个小包装拿出任何一个来,把它的外包装除掉,又剥出 6 个小包装。
axis=2 形状为 5 ,意思是把上一步得到的 6 个小包装拿出任何一个来,把它的外包装除掉,,里边是 5 个元素。这里说“元素”没再说“小包装”是因为 5 后边已经是三行两列的二维数组了(具体到单张“煎饼”了),没有小包装袋了。
"""
"""
一个六维数组:
不写了,反正就是再套个袋子,装一个或多个五维数组,类似:(3, 10, 6, 5, 3, 2),这是一个六维数组装了三个五维数组。
其他更高维数组,你就再一层一层套袋子就是了。
[[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]] ← 以上第二份“煎饼最小包装单元”:三维(5, 3, 2)
[[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]] ← 以上第三份“煎饼最小包装单元”:三维(5, 3, 2)
[[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]
[0. 0.]]] ← 以上第四份“煎饼最小包装单元”:三维(5, 3, 2)
# ------到这里,如果没有被包装到更大的包装里,还是三维,写作:多个独立的(5, 3, 2)。
# ------以上有四份“煎饼最小包装单元”,我们可以说,4个(5, 3, 2)。
# ------想把“4”写在形状元组中?那得多层包装了。
]
# ------到这里,多个独立的“煎饼最小包装单元”又加了外包装,成“超市销售包”:(4, 5, 3, 2)。
"""
"""
重点来了,看如何改变维度。
a1 = np.expand_dims(a, axis=0)。
先看二维数组。
"""
arr = np.zeros((3, 2), dtype=int)
print(arr.shape)
arr1 = np.expand_dims(arr, axis=0)
"""
很多教程:都从 axis=0 是行还是列开始讲,以及怎么算行怎么算列。
累死,很多人看完还是搞不懂,甚至更懵。
看啥?形状元组。
(3, 2)。
二维数组:第一维有三个特征,第二维有两个特征。
编故事:这个二维数组表示的是三个人的两门课成绩。
第一维:三个特征(比如“张三/李四/王五”)。
第二维:两个特征(比如“语文/数学”)。
第一维对应的 axis 为 0 。
第二维的 axis=1 。
第三维的 axis=2 ,当然,在二维数组中不存在 axis2 。
以此类推。
行列高的概念:你管哪个是行哪个是列呢哪个又是高呢。
示例中,指定 axis=0 ,让在此基础上增加一维。
让在原来第一维的前边(或者说最外围)加。
把原来不管是几维的数组都收拾起来,打包装在一个外包装里,这个外包装就是要增加的维度。
原来是二维,扩展后是三维,没问题,那扩展后形状怎样?
0 维原来的形状是 3 ,好,在 3 这个形状前加一维,变成:(1, 3, 2)。
验证一下。
"""
print(arr1.shape)
"""
(1, 3, 2)
"""
"""
仅仅加一维,相当于过度包装了:一个袋子,装了一份原来就有袋子包裹的东西。
如果最外边的袋子装两份,形状就变成:(2, 3, 2)。
比如用新加的维度区分“期中/期末”两个考试时间。
(1, 3, 2)可理解“期中/期末”其中一次成绩“煎饼”。
所以增加维度意义:
增加空间,分层次放更多独立小包装。
本次增加一维,实现“多平面/多煎饼”。
再看其它 axis 。
"""
arr = np.zeros((3, 2), dtype=int)
print(arr.shape)
arr1 = np.expand_dims(arr, axis=1)
"""
axis=1 相对(3, 2),指向“2”,在“2”前加一个维度,变成:(3, 1, 2)。
打印验证一下:
"""
print(arr1.shape)
"""
(3, 1, 2)
"""
"""
如果用新增加的维度放六个特征,形状变为:(3, 6, 2)。
能写 arr1 = np.expand_dims(arr, axis=2) 吗?
不能。原为二维数组,只有两个维度,指定 axis=1 已是极限。
"""
"""
再看三维数组。
"""
arr = np.zeros((3, 2, 1), dtype=int)
print(arr)
"""
[[[0]
[0]]
[[0]
[0]]
[[0]
[0]]]
"""
"""
二维数组形状为两行一列,把一维数组(“煎饼制作材料”)做成一张煎饼,这样的煎饼有三张。
把三张煎饼包起来,做成“煎饼最小包装单元”。
超市销售时,要求把三个“煎饼最小包装单元”包成一包再卖。
怎么办?
需要个外包装对吧?
加一维。在最外边加。
axis=0 ,好,开工。
"""
arr1 = np.expand_dims(arr, axis=0)
print(arr1.shape)
"""
(1, 3, 2, 1)
"""
"""
(1, 3, 2, 1):一个“超市销售包”。
"""
# ~ npy1()
2 欢迎纠错
欢迎纠错,随时更新。
联系方式:评论、私信,或 企鹅 :1790042182 。
3 免费爬虫
https://affiliate.bazhuayu.com/M8lKUC
-
- 以下关于 Markdown 编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
++ 新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
++ 功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
++ 合理的创建标题,有助于目录的生成
直接输入1次+,并按下space后,将生成1级标题。
输入2次+,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
++ 如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
++ 插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
++ 如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
++ 生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
++ 创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
+++ 设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
+++ SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
++ 创建一个自定义列表
Markdown
: Text-to-HTML conversion tool
-
Authors
- John
- Luke
++ 如何创建一个注脚
一个具有注脚的文本。2
++ 注释也是必不可少的
Markdown将文本转换为 HTML。
++ KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
++ 新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
++ UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
++ FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
++ 导出与导入
+++ 导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
+++ 导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎