图解 · 运行过程 · 工程取舍

改摆法与改数值,分开看

动态图解约 1 千字1 组分步图解

reshape、转置、广播为什么不能互换?

配套正文:F08基础课

动态图解 · F08

改摆法与改数值,分开看

reshape、转置、广播为什么不能互换?

把矩阵想成带地址的格子。reshape改变分组读法;转置改变行列地址对应;广播配合加法等运算改变数值。三者最后可能有相似形状,却不能据此当成同一过程。

reshape保持规定的元素遍历顺序,按另一形状分组。
转置原第i行第j列映射到新第j行第i列。
广播使小张量沿允许的轴参与大张量运算。

输入与适用条件:四帧中的三个对照操作都从原矩阵[[1,2,3],[4,5,6]]开始;每帧明确重置,而不是接力计算。

1 / 4 · 原来的两行

第1步,共4步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

改摆法与改数值,分开看:原来的两行原矩阵 [2,3]123456固定原表;下面不是“先reshape再转置”。

六个数的行优先顺序是1,2,3,4,5,6。接下来进行两种独立操作,均从这张原表出发。

本步状态由图形与说明共同给出。

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

逐步说明与计算记录

以下解释全部展开,与播放器使用同一份数据;不是另换输入的第二个算例。

1.原来的两行

六个数的行优先顺序是1,2,3,4,5,6。接下来进行两种独立操作,均从这张原表出发。

2.reshape:只重新分组

保持1到6的先后顺序,每两个数成一行。结果是[[1,2],[3,4],[5,6]]。

3.转置:交换行列身份

恢复原矩阵,再把原来的列变成新的行。得到[[1,4],[2,5],[3,6]],虽然同样是[3,2],但内容排列不同。

4.广播:这次真的做加法

再次恢复原矩阵,给第一行都加10、第二行都加20,得到[[11,12,13],[24,25,26]]。这不是重新摆放,而是数值运算。

为什么需要

形状操作把数据组织成算子需要的格式,减少不必要复制可提高效率。

怎样实现

跟踪下标、步幅和连续性;需要复制时不能只凭“看起来是视图”判断。

可能的代价与误解

把转置后的结果当原表继续相加,会得到另一组数却可能不报错。

如何判断是否做对

对固定整数表逐格比对结果,并检查是否发生内存复制。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。