当前位置: 首页 > 编程笔记 >

numpy.transpose对三维数组的转置方法

张可人
2023-03-14
本文向大家介绍numpy.transpose对三维数组的转置方法,包括了numpy.transpose对三维数组的转置方法的使用技巧和注意事项,需要的朋友参考一下

如下所示:

import numpy as np 

三维数组

arr1 = np.arange(16).reshape((2, 2, 4)) 
#[[[ 0 1 2 3] 
# [ 4 5 6 7]] 
 
# [[ 8 9 10 11] 
# [12 13 14 15]]] 
 
arr2=arr1.transpose((1,0,2)) 
#[[[ 0 1 2 3] 
# [ 8 9 10 11]] 
# 
# [[ 4 5 6 7] 
# [12 13 14 15]]] 

正序为(0,1,2),数组为

#[[[ 0 1 2 3] 
# [ 4 5 6 7]] 
 
# [[ 8 9 10 11] 
# [12 13 14 15]]] 

为什么进过tanspose(1,0,2),数组变为

#[[[ 0 1 2 3] 
# [ 8 9 10 11]] 
# 
# [[ 4 5 6 7] 
# [12 13 14 15]]] 

仔细观察之后,可以看到转置后的数组和转置前的数组的区别就是第一页的第二行和第二页的第一行对换了,可是为什么?

当我用arr1[0,1,0],索引值为4

当我用arr2[1,0,0],索引值为4

对比索引参数表的变化和正序和转置序的不同似乎存在某种联系

对于arr1数组,索引参数表[0,0,x]可以表示第一页的第一行,当前两个参数对换之后,同一个元素的索引参数表并没有变化

故arr2的第一页第一行和arr1的第一页第一行相同

对于arr1数组,索引参数表[0,1,x]可以表示第一页第二行,当前两个参数对换之后,同一个元素的索引值比如[0,1,0]变为[1,0,0],

这就是解释了索引值4的索引参数表的不同

大概就是这个思路所以transpose(1,0,2),数组的第一页第二行和第二页第一行对换

后面的四种转置方式也大致是这个思路,仔细观察一下,理解起来应该不难

arr3=arr1.transpose((0,2,1)) 
 
# [[[ 0 4] 
# [ 1 5] 
# [ 2 6] 
# [ 3 7]] 
# 
# [[ 8 12] 
# [ 9 13] 
# [10 14] 
# [11 15]]] 
 
arr4=arr1.transpose((2,0,1)) 
#[[[ 0 4] 
# [ 8 12]] 
# 
# [[ 1 5] 
# [ 9 13]] 
# 
# [[ 2 6] 
# [10 14]] 
# 
# [[ 3 7] 
# [11 15]]] 

这里要注意的是,arr4数组变成4页,这是因为页码和行码对换之后,

页码从数量2,变成了4

而行码从数量4,变成了2

arr5=arr1.transpose((2,1,0)) 
#[[[ 0 8] 
# [ 4 12]] 
# 
# [[ 1 9] 
# [ 5 13]] 
# 
# [[ 2 10] 
# [ 6 14]] 
# 
# [[ 3 11] 
# [ 7 15]]] 
 
arr6=arr1.transpose((1,2,0)) 
#[[[ 0 8] 
# [ 1 9] 
# [ 2 10] 
# [ 3 11]] 
# 
# [[ 4 12] 
# [ 5 13] 
# [ 6 14] 
# [ 7 15]]] 

另外,转置(2,0,1)可以看成,先转置(0,2,1)再转置(1,0,2)

转置(2,1,0)可以看成,先转置(1,0,2),然后转置(0,2,1),最后转置(1,0,2)

转置(1,2,0)可以看成,先转置(1,0,2),在转置(0,2,1)

代码可以写成

arr4=arr1.transpose(0,2,1).transpose(1,0,2) 
#[[[ 0 4]
# [ 8 12]]
#
# [[ 1 5]
# [ 9 13]]
#
# [[ 2 6]
# [10 14]]
#
# [[ 3 7]
# [11 15]]]

结果一样!

以上这篇numpy.transpose对三维数组的转置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 我有一个基于行的多维数组: 我想将此数组转换为基于列的数组,如下所示: …但是我真的不知道从哪里开始 问题答案: 试试这个: 输出:

  • 问题内容: 我使用Python和NumPy,“移调”有一些问题: 调用不转置数组。例如,如果为,则它正确转置,但我需要的转置。 问题答案: 它的工作完全符合预期。一 维 数组的转置仍然是 一维 数组!(如果您习惯使用matlab,从根本上来说就没有1D数组的概念。Matlab的“ 1D”数组是2D。) 如果要将一维矢量转换为二维数组然后转置,只需对其进行切片(或者,它们是相同的,可读性更高)。 一

  • 本文向大家介绍将二维数组转为一维数组的2种方法,包括了将二维数组转为一维数组的2种方法的使用技巧和注意事项,需要的朋友参考一下 如何将下面的二维数组转为一维数组。 第一种方法: 第二种方法: 以上两种解法print_r($names);后的结果为: 注意:array_column();可以有第三个参数,如 $n = array_column($msg, 'name', 'id'); print_r

  • 因此,我有一个3D数组,如。3D数组的大小可以改变为不同的大小,例如:或等等。对于第一个示例,假设im on position。我想知道一种方法,可以将当前位置与当前位置后面的变量位置互换,例如:I want to swap与后面的第3个值互换。因此,在这种情况下,它将是。我怎么算呢?

  • 本文向大家介绍PHP 二维数组和三维数组的过滤,包括了PHP 二维数组和三维数组的过滤的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,具体代码如下所示: 下面一段代码给大家介绍php三维数组变二维数组 关于PHP 二维数组和三维数组的过滤小编就给大家介绍这么多,希望对大家有所帮助!

  • 问题内容: 我试图把我的头缠在三维阵列上。我知道它们是二维数组的数组,但是我正在阅读的书说的话使我感到困惑。 在我正在阅读的书的练习中,它要求我为全彩色图像制作三维阵列。它给出了一个小例子,说明了这一点: 如果我们决定选择三维数组,则可以通过以下方式声明数组: 但是,这样会更有效吗? 其中3是rgb值,0是红色,1是绿色,2是蓝色。对于后者,每个二维数组将存储行和列的颜色值,对吗?我只想确保我了解