np.transpose

article/2025/10/13 7:32:19

最近看代码的时候,老是出现np.transpose()这个用法,但是对其中的原理还是不甚了解,今天就来总结一下,以及这个用法对图像的结果及效果。

这里写图片描述
参数 a:输入数组
axis: int类型的列表,这个参数是可选的。默认情况下,反转的输入数组的维度,当给定这个参数时,按照这个参数所定的值进行数组变换。
返回值 p:ndarray 返回转置过后的原数组的视图。

给大家举个例子。

  1. 对于一维数组:
>>> import numpy as np
>>> t=np.arange(4)
>>> t
array([0, 1, 2, 3])
>>> t.transpose()
array([0, 1, 2, 3])
>>> 

由上可见,对于一维数组而言,numpy.transpose()是不起作用的。

  1. 对于二位数组:
>>> two=np.arange(16).reshape(4,4)
>>> two
array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15]])
>>> two.transpose()
array([[ 0,  4,  8, 12],[ 1,  5,  9, 13],[ 2,  6, 10, 14],[ 3,  7, 11, 15]])
>>> two.transpose(1,0)
array([[ 0,  4,  8, 12],[ 1,  5,  9, 13],[ 2,  6, 10, 14],[ 3,  7, 11, 15]])

有以上可见,原数组two的数组两个轴为(x,y),对应的下标为(0,1),np.transpose()传入的参数为(1,0),即将原数组的x,y轴互换。综上,对二维数组的transpose操作就是对原数组的转置操作。

  1. 对于三维数组:先看一个例子。
>>> three=np.arange(18).reshape(2,3,3)
>>> three
array([[[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8]],[[ 9, 10, 11],[12, 13, 14],[15, 16, 17]]])
>>> three.transpose()
array([[[ 0,  9],[ 3, 12],[ 6, 15]],[[ 1, 10],[ 4, 13],[ 7, 16]],[[ 2, 11],[ 5, 14],[ 8, 17]]])
>>> 

这是numpy.transpose()函数对three数组默认的操作,即将原数组的各个axis进行reverse一下,three原始axis排列为(0,1,2),那numpy.transpose()默认的参数为(2,1,0)得到转置后的数组的视图,不影响原数组的内容以及大小。
我们一步一步来分析这个过程:axis(0,1,2)———>axis(2,1,0) ,transpose后的数组相对于原数组来说,相当于交换了原数组的0轴和2轴。

#对原始three数组的下标写出来,如下:
A=[[ [ (0,0,0) , (0,0,1) , (0,0,2)],[ (0,1,0) , (0,1,1) , (0,1,2)],[ (0,2,0) , (0,2,1) , (0,2,2)]],[[ (1,0,0) , (1,0,1) , (1,0,2)],[ (1,1,0) , (1,1,1) , (1,1,2)],[ (1,2,0) , (1,2,1) , (1,2,2)]]]#接着把上述每个三元组的第一个数和第三个数进行交换,得到以下的数组B=[[[ (0,0,0) , (1,0,0) , (2,0,0)],[ (0,1,0) , (1,1,0) , (2,1,0)],[ (0,2,0) , (1,2,0) , (2,2,0)]],[[ (0,0,1) , (1,0,1) , (2,0,1)],[ (0,1,1) , (1,1,1) , (2,1,1)],[ (0,2,1) , (1,2,1) , (2,2,1)]]]#最后在原数组中把B对应的下标的元素,写到相应的位置
#对比看一下,这是原数组
[[[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8]],[[ 9, 10, 11],[12, 13, 14],[15, 16, 17]]]
# 按照B的映射关系得到最终的数组。
C=[[[ 0,  9],[ 3,  12],[ 6,  15]],[[ 1, 10],[4, 13],[7, 16]][[ 2, 11],[5, 14],[8, 17]]
]
# 最终的结果也就是数组C

那么我们知道了旋转的矩阵结果,那么在深度学习中为什么要这么旋转图片矩阵,以及这样做的意义及效果又是什么,我们可以继续往下探讨。
在mnist数据集中,挑出一张照片进行不同的transpose变换,观察得到的图片的形状。
下面举一个例子,数据集为4张图片:
这里写图片描述
四张图片分别代表“0”、“0”、“4”、“8”
处理的代码为:

import numpy as np
from PIL import Image
import os
data = np.empty((4, 20, 20), dtype="uint8")
imgs = os.listdir("E:\Kerasmnist/train\some")
num = len(imgs)
for i in range(num):img = Image.open("E:\Kerasmnist/train\some/" + imgs[i])img.show()arr = np.asarray(img, dtype="uint8")data[i, :, :] = arrconvert=data.transpose(2,1,0)for k in range(len(convert[0])):img2=Image.fromarray(convert[k])img2.show()

目前没发现有什么奇妙之处,这个问题先放在这里,过些日子再继续探讨吧,See you

>>> arr = np.arange(16).reshape((2, 2, 4))
>>> arr
array([[[ 0,  1,  2,  3],[ 4,  5,  6,  7]],[[ 8,  9, 10, 11],[12, 13, 14, 15]]])
>>> arr.transpose((1,0,2))
array([[[ 0,  1,  2,  3],[ 8,  9, 10, 11]],[[ 4,  5,  6,  7],[12, 13, 14, 15]]])
>>> arr.transpose((0,2,1))
array([[[ 0,  4],[ 1,  5],[ 2,  6],[ 3,  7]],[[ 8, 12],[ 9, 13],[10, 14],[11, 15]]])
>>>  arr.transpose((1,2,0))File "<pyshell#23>", line 2arr.transpose((1,2,0))^
IndentationError: unexpected indent
>>> arr.transpose((1,2,0))
array([[[ 0,  8],[ 1,  9],[ 2, 10],[ 3, 11]],[[ 4, 12],[ 5, 13],[ 6, 14],[ 7, 15]]])
>>> 

http://chatgpt.dhexx.cn/article/pJiW9Q8N.shtml

相关文章

np.transpose()函数详解

1. 碰见 numpy.transpose 用于高维数组时挺让人费解&#xff0c;通过分析和代码验证&#xff0c;发现 transpose 用法还是很简单的。说白了就是映射坐标轴 2. 举个例子&#xff1a; x np.arange(12).reshape((2,3,2))创建一个2 * 3 * 2的数组&#xff1a; 使用 numpy.trans…

【Python学习】transpose函数

shape:(batch_size * x * y ) 有batch_size个二维矩阵&#xff08;x * y&#xff09;相当于(z * x * y) 1. 多维数组的索引 import numpy as np # 创建 x np.arange(12).reshape((2,2,3)) print(x)# 得到三维数组 [[[ 0 1 2][ 3 4 5]][[ 6 7 8][ 9 10 11]]] # 相当于 b…

最简单例子解释python的transpose函数

目录 一&#xff0c;我们要弄清楚transpose的轴是什么意思&#xff1f;二&#xff0c;(x,y,z)的物理含义:三&#xff0c;transpose变换的例子四&#xff0c;代码验证五&#xff0c;关于经过了transpose变换之后&#xff0c;这个三维数组的形状是如何变化确定的&#xff1f; 二维…

转置(transpose)的理解

目录 1 .T,适用于一、二维数组 arr.T #求转置 transpose 的原理其实是根据维度&#xff08;shape&#xff09;索引决定的&#xff0c;举个栗子&#xff1a; 2. 高维数组 3. swapaxes 转置可以对数组进行重置&#xff0c;返回的是源数据的视图&#xff08;不会进行任何复制…

Python numpy.transpose 详解

前言 看Python代码时&#xff0c;碰见 numpy.transpose 用于高维数组时挺让人费解&#xff0c;通过一番画图分析和代码验证&#xff0c;发现 transpose 函数的使用方法还是很简单的。 注&#xff1a;评论中说的三维坐标图中的 0 1 2 3 标反了&#xff0c;已经修正&#xff0c…

2020年最新可用的谷歌镜像站

g.vovososo.com 谷歌镜像入口 不用翻&#xff0c;墙&#xff0c;就可实现访问谷歌搜索 &#xff0c;也可以通过扫描以下二维码下载APP进行访问

谷歌搜索镜像

分享自己收藏的谷歌搜索镜像 可自由在谷歌查询信息 http://ac.scmor.com/ 转载于:https://www.cnblogs.com/aeip/p/9506344.html

谷歌引擎镜像网址

谷歌引擎镜像网址 当前可用的网址 链接: https://gfsoso.xz95.top/ 若是显示我们的系统检测到您的计算机网络中存在异常流量&#xff0c;可重新搜索或者选择图片进行搜索&#xff0c;然后在点开全部搜索&#xff08;有时候可能会崩吧&#xff0c;我个人感觉用图片搜索再点全…

谷歌镜像地址分享

谷歌镜像地址分享 谷歌镜像地址分享谷歌应用商店参考文档 谷歌镜像地址分享 使用搜索引擎来查找所需要的资料是一件很普遍的事&#xff0c;而搜索引擎主要有百度、必应、雅虎和谷歌等等。 每个搜索引擎各有利弊&#xff0c;而一般大家公认的是谷歌搜索引擎搜索准确率更高一些&…

分享27个谷歌(Google)镜像

为什么80%的码农都做不了架构师&#xff1f;>>> 多年来搜集的谷歌镜像&#xff0c;大多数都能打开&#xff0c;打不开的也许过一段上一段时间能打开。真诚希望这些神奇的搜索引擎&#xff0c;能助你在前端界有所建树。有空关注下面前端相关公众账号jsdig(及时挖掘&…

谷歌学术镜像_Google镜像站

在国外留学要想毕业顺利, 论文可是其中很重要的一环. 相比于国内, 英国对于论文的要求更为严格, 要有一定的格式和学术要求. 除此之外, 还要有理有据, 要用高质量的引文作为对自己观点的论证. 这时就要查文献了. 要说查文献, 谷歌学术绝对是最佳帮手, 免费还操作简单. 当然全面…

国内最新可用Google谷歌镜像网站入口网站网址

很多同学都需要使用谷歌搜索来查找一些英文的学习资料&#xff0c;但是由于某些原因国内无法使用。办公人导航就和大家分享另外一种在国内可以使用谷歌搜索的方法那就使用使用谷歌镜像网站。 Google谷歌镜像网站可以帮助我们在国内访问和使用谷歌搜索&#xff0c;但这并不是真…

Google谷歌搜索引擎镜像入口网址大全导航,谷歌搜索引擎镜像站

当我们需要使用谷歌搜索一些学习资料的时候&#xff0c;就需要借助Google谷歌搜索引擎镜像网站&#xff0c;很多同学不知道有哪些可以使用的谷歌搜索引擎镜像站&#xff0c;下面办公人导航就和大家分享Google谷歌搜索引擎镜像入口网址大全导航。 1.google谷歌搜索引擎镜像站网址…

[2023-01 持续更新] 谷歌学术google镜像/Sci-Hub可用网址/Github镜像可用网址总结

目录 一、谷歌学术镜像二、Sci-Hub三、Github镜像四、GitHub下载文件加速 一、谷歌学术镜像 首先强烈推荐谷歌hub 网址一&#xff1a;谷歌学术-谷歌镜像网址https://www.google-hub.com/ 网址二&#xff1a;http://scholar.scqylaw.com/ (附 sci-hub) 网址三&#xff1a;htt…

Python求最大公约数和最小公倍数

大家好&#xff0c;我是Python领域的博主&#xff0c;如果觉得我的写的不错的话&#xff0c; 请点赞关注支持我一下。如果你是初学者&#xff0c;可以和小编一起学习&#xff0c;在这里我每天都会发Python的基础知识&#xff0c;以及相关的代码 解题思路&#xff1a; 最大公因数…

C语言求最大公约数常见思路

一、辗转相除法 辗转相除法又称为欧几里得算法&#xff0c;用于求两数的最大公约数gcd(全称为greatest common divisor) 注意两数必须为非负整数a,b。用法为&#xff1a;用两数中较大的数&#xff08;a1&#xff09;除以较小的数&#xff08;b1&#xff09;&#xff0c;得到余…

用函数求最大公约数c语言,C语言求最大公约数公式分享

从键盘输入两个正整数 a 和 b&#xff0c;求其最大公约数和最小公倍数。 算法思想 利用格式输入语句将输入的两个数分别赋给 a 和 b&#xff0c;然后判断 a 和 b 的关系&#xff0c;如果 a 小于 b&#xff0c;则利用中间变量 t 将其互换。再利用辗转相除法求出最大公约数&#…

c语言分解质因数法求最大公约数,最大公约数求法大全

原标题&#xff1a;最大公约数求法大全 小复习 上一次我们介绍了一种特殊的最大公约数求法&#xff0c;叫做辗转相除法。你还记得吗&#xff1f; 辗转相除法 用较小数除较大数&#xff0c;再用出现的余数(第一余数)去除除数&#xff0c;再用出现的余数(第二余数)去除第一余数&a…

java实现求最大公约数

题目&#xff1a;任意输入两个整数&#xff0c;如何求他们的最大公约数&#xff1f; 最大公约数&#xff1a;也称最大公因数&#xff0c;最大公因子&#xff0c;是指两个或多个整数共有约数中最大的一个。 方法一&#xff1a;枚举法 先输入两个整数&#xff0c;然后比较两个…

C语言用for循环求最大公约数,C语言循环结构 -C语言求最大公约数

这是一个C语言 while 循环示例&#xff1a;求正整数 m 和 n 的最大公约数。 问题分析 输入&#xff1a;两个正整数。 输出&#xff1a;一个正整数(最大公约数)。 最大公约数(gcd)是指几个数共有的因数之中最大的一个数&#xff0c;比如 8 和 12 的最大公约数是 4&#xff0c;一…