数组行列转置神器Transpose被玩坏了
2018-02-25 23:59
337 查看
几天前的博文和大家分享了“Transpose实现数组行列转置的限制”。今天来看数组行列转置神器Transpose另一个奇特的用法。
以二维数组为例,一般情况下代码中引用二维数组的元素使用如a(x,y)的形式,可以称为普通二维数组,下图左侧为一个3x2的数组,共有6个元素。
其实,数组也可以有其他的形式,暂且称为嵌套二维数组(不确定是否有更专业的的名字)。其中a(x)是一个一维数组,包含a(1),a(2),a(3)三个元素;每个数组元素存储的内容,不再是一个数字或者字符串,而是另外一个一维数组,例如:a(1)中存储了包含两个元素的一维数组(1和4),其引用方式为a(x)(y)。
接下来就来在代码中构建一个嵌套二维数组array_B,首先声明array_B(1 To 3)为包含3个元素的一维数组,其中保存的数据是另一个包含两个元素的一维数组array_A。
Sub Transpose4Fun()
Dim array_A(1 To 2), array_B(1 To 3), array_C, array_D, x
For x = 1 To 3
array_A(1) = x
array_A(2) = x
4000
+ 3
array_B(x) = array_A
Next x
array_C = Application.Transpose(array_B)
array_D = Application.Transpose(array_C)
Stop
End Sub 嵌套二维数组array_B转置的结果保存在数组array_C中,然后将数组array_C再次转置的结果保存中数组array_D,看起来有些乱呦!细心的同学可能有疑问了 ——两次转置: 转置(转置(二维数组)),最终结果回到出发点,array_D和array_B是一模一样的吗?不解释,先上图。
只能说现实和理想是有差距的,VBA处理数组的过程和大家想象的并不相同,这也就是本文要告诉大家的——数组行列转置神器Transpose被玩坏了。
一起来看看VBA本地窗口中的数据,不难看出array_B就是前文中讲的嵌套二维数组;接下来对array_B进行转置得到数组array_C,数组元素的值确实完成了行列转置,但是这个数组变成了一个2x3的普通二维数组;最后对于array_C又进行了一次转置得到数组array_D,众所周知负负得正,但是array_D仍然是普通二维数组,并没有变回嵌套二维数组,也就是和array_B存储方式是不一样的。
为什么会这样呢,本博主也不得而知,呵呵!
以二维数组为例,一般情况下代码中引用二维数组的元素使用如a(x,y)的形式,可以称为普通二维数组,下图左侧为一个3x2的数组,共有6个元素。
其实,数组也可以有其他的形式,暂且称为嵌套二维数组(不确定是否有更专业的的名字)。其中a(x)是一个一维数组,包含a(1),a(2),a(3)三个元素;每个数组元素存储的内容,不再是一个数字或者字符串,而是另外一个一维数组,例如:a(1)中存储了包含两个元素的一维数组(1和4),其引用方式为a(x)(y)。
接下来就来在代码中构建一个嵌套二维数组array_B,首先声明array_B(1 To 3)为包含3个元素的一维数组,其中保存的数据是另一个包含两个元素的一维数组array_A。
Sub Transpose4Fun()
Dim array_A(1 To 2), array_B(1 To 3), array_C, array_D, x
For x = 1 To 3
array_A(1) = x
array_A(2) = x
4000
+ 3
array_B(x) = array_A
Next x
array_C = Application.Transpose(array_B)
array_D = Application.Transpose(array_C)
Stop
End Sub 嵌套二维数组array_B转置的结果保存在数组array_C中,然后将数组array_C再次转置的结果保存中数组array_D,看起来有些乱呦!细心的同学可能有疑问了 ——两次转置: 转置(转置(二维数组)),最终结果回到出发点,array_D和array_B是一模一样的吗?不解释,先上图。
只能说现实和理想是有差距的,VBA处理数组的过程和大家想象的并不相同,这也就是本文要告诉大家的——数组行列转置神器Transpose被玩坏了。
一起来看看VBA本地窗口中的数据,不难看出array_B就是前文中讲的嵌套二维数组;接下来对array_B进行转置得到数组array_C,数组元素的值确实完成了行列转置,但是这个数组变成了一个2x3的普通二维数组;最后对于array_C又进行了一次转置得到数组array_D,众所周知负负得正,但是array_D仍然是普通二维数组,并没有变回嵌套二维数组,也就是和array_B存储方式是不一样的。
为什么会这样呢,本博主也不得而知,呵呵!
相关文章推荐
- Transpose实现数组行列转置的限制
- Numpy中数组转置和轴对换——transpose、T、swapaxes
- C语言:写一个函数,使给定的一个3x3二维整型数组转置,即行列互换
- numpy.transpose对三维数组的转置方法
- 写一个函数,使给定的一个3*3的二维整形数组转置,即行列互换*/
- matlab画图笔记-数组转置-截取行列及多组数据显示
- 创建一个二维数组,实现该数组的行列转置,输出
- numpy.transpose对三维数组的转置
- 习题 7.4 写一个函数,使给定的一个3*3的二维整形数组转置,即行列互换。
- 数组,行列互换
- 数据结构实验之数组三:快速转置
- 程序员面试金典:数组--像素翻转、清除行列
- sql行列转置
- 数据结构实验之数组三:快速转置
- 【Python】无须numpy,利用map函数与zip(*)函数对数组转置
- 将两组二位数组行列对换
- Problem A: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换
- SQL 行列转置
- 数据结构实验之数组一:矩阵转置
- 转置数组中所有元素