numpy中的转置Transpose和.T以及轴对换swapaxis
简 介: 本文对于 numpy中的转置Transpose和.T以及轴对换swapaxis 中关于numpy矩阵的轴交换函数进行了测试。并对于深度学习中的图像数据进行处理。 参考文章:https://blog.csdn.net/qq1483661204/article/details/70543952 标签:11,arr,转置,Transpose,对换,transpose,维度,swapaxes,print 来源: https://blog.csdn.net/u014157109/article/details/89787623
关键词
: 矩阵,轴交换
Contents
§01 矩阵轴交换
1.1 为什么需要交换矩阵?
对于矩阵进行轴交换,在实际数据处理中非常有用处。比如对于彩色图像数据,它的数据排布结构往往是(H,W,3)。
1.1.1 显示彩色图片数据结构
img = cv2.imread(filename)
print(img)
print(img.shape)
▲ 图1.1 测试图片
下面显示
d:\temp\TEMP0001\Picture\211215195054.JPG
[[[119 71 59][119 71 59][118 70 58]...[160 215 212][161 216 213][162 217 214]]]
(327, 560, 3)
在利用深度学习网络对于图片进行识别和预测的时候,往往需要图片的数据结构呈现:(C,W,H),也就是图片的R,G,B空间是分层的,这就需要对于图片的轴进行交换。
1.1.2 轴交换与轴内反转不同
矩阵的轴交换,与同纬度内的数据交换,反转不同。
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *a = array([[1,2,3],[4,5,6]])
print(a)b = a[::-1]
c = a.T[::-1].Tprint(b,c)
下面显示了对于矩阵A的横轴,纵轴的维度内的反转。
[[1 2 3]
[4 5 6]][[4 5 6]
[1 2 3]][[3 2 1]
[6 5 4]]
而矩阵a的轴(横轴、纵轴)之间的结果为:
[[1 4]
[2 5]
[3 6]]
1.2 两种轴交换方法
在python中numpy中有两种矩阵轴交换的方法:
- transpose()
- swapaxes()
1.2.1 transpose
这个函数如果括号内不带参数,和.T效果一样,见下面例子:
import numpy as nparr=np.arange(16).reshape(2,2,4)
print('arr:')
print(arr)print('arr.transpose:')
print(arr.transpose())print('arr.transpose(2,1,0):')
print(arr.transpose(2,1,0))print('arr.T:')
print(arr.T)
结果:
arr:
[[[ 0 1 2 3][ 4 5 6 7]][[ 8 9 10 11][12 13 14 15]]]
arr.transpose:
[[[ 0 8][ 4 12]][[ 1 9][ 5 13]][[ 2 10][ 6 14]][[ 3 11][ 7 15]]]
arr.transpose(2,1,0):
[[[ 0 8][ 4 12]][[ 1 9][ 5 13]][[ 2 10][ 6 14]][[ 3 11][ 7 15]]]
arr.T:
[[[ 0 8][ 4 12]][[ 1 9][ 5 13]][[ 2 10][ 6 14]][[ 3 11][ 7 15]]]
从上面的例子中可以看出arr.transpose(), arr.T ,arr.transpose(2,1,0)的结果是相同的。现在我们详细看看transpose()带参数的情况,就会明白为什么arr.transpose(2,1,0)有这样的结果。
首先因为arr这个数组有三个维度,三个维度的编号对应为(0,1,2),假如我们需要拿到arr的7这个元素,肯定需要些三个维度的值,7的第一个维度为0,第二个维度为1,第三个3,所以arr[0,1,3] = 7。
再回到transpose()这个函数,它里面参数的顺序就是维度的顺序,比如transpose(2,1,0),就是把之前第三个维度转为第一个维度,之前的第二个维度不变,之前的第一个维度变为第三个维度,我们继续拿7这个值来说,之前的索引为[0,1,3],按照我们的转换方法,把之前的第三维度变为第一维度,之前的第一维度变为第三维度,那么现在7的索引就是(3,1,0)
同理所有的数组内的数字都是这样变得,这就是transpose()内参数的变化。
1.2.2 swapaxis
swapaxes接受一对轴编号,或者叫一对维度编号,里面只能是两个参数,且不分顺序。
import numpy as np
arr=np.arange(16).reshape(2,2,4)
print('arr:')
print(arr)print('arr.swapaxes(1,2):')
print(arr.swapaxes(1,2)) #print('arr.swapaxes(2,1):')
#print(arr.swapaxes(2,1))print('arr.transpose(0,2,1):')
print(arr.transpose(0,2,1))
结果:
arr:
[[[ 0 1 2 3][ 4 5 6 7]][[ 8 9 10 11][12 13 14 15]]]
arr.swapaxes(1,2):
[[[ 0 4][ 1 5][ 2 6][ 3 7]][[ 8 12][ 9 13][10 14][11 15]]]
arr.swapaxes(2,1):
[[[ 0 4][ 1 5][ 2 6][ 3 7]][[ 8 12][ 9 13][10 14][11 15]]]
arr.transpose(0,2,1):
[[[ 0 4][ 1 5][ 2 6][ 3 7]][[ 8 12][ 9 13][10 14][11 15]]]
从上面的例子可以看出arr.swapaxes(1,2),arr.swapaxes(2,1),arr.transpose(0,2,1)效果是等价的。
§02 图像处理
利用上面的矩阵的轴交换可以方便进行对图像数据进行转换。从原来的RGB像素数据修改成RGB平面数据。
2.1 10数据集合
在 AI Studio中的视觉数据集合 介绍了对于AI Studio中的Cifar10数据集合进行操作过程。
2.1.1 利用pickle打开Cifar数据文件
利用pickle函数打开Cifar数据文件,
(1)下载Cifar10
train_dataset = paddle.vision.datasets.Cifar10(mode='train')
fromfile = '/home/aistudio/.cache/paddle/dataset/cifar/cifar-10-python.tar.gz'
destfile = '/home/aistudio/data/cifar.tar.gz'shutil.copyfile(fromfile, destfile)
将下载的Cifar10数据在data目录加压缩,最后形成文件:
filename = 'data/cifar-10-batches-py/data_batch_1'
(2)打开数据文件
filename = '/home/aistudio/data/cifar-10-batches-py/data_batch_1'def unpickle(file):import _pickle as cPicklewith open(file, 'rb') as f:dict = cPickle.load(f, encoding='bytes')return dictd = unpickle(filename)
2.2 显示图片
(1)利用zip对图像进行转轴
if procarg[:1] == '、' or procarg[:1] == '#' or procarg[:1] == '/':tspsendwindowkey("BML CodeLab", "c", control=1)time.sleep(.5)if greatflag > 0:allstr = clipboard.paste()allstr = allstr.replace('\r', '')strall = ''.join([('\n> '+ s if len(s.strip('\n').strip()) > 0 else '<br>') for s in allstr.split('\n')])clipboard.copy(strall + '\n')print('\a')tspsendwindowkey(csdn_title, "v", control=1, noreturn=1)exit()
▲ 图2.2.1 CIfar10图片
(2)利用矩阵轴转换
下面几种方式可以获得相同的显示效果。显然使用numpy矩阵轴交换,三维矩阵转置代码最简单。
Ⅰ.方式1
imgdata = imgdata.T
plt.imshow(imgdata)
plt.show()
Ⅱ.方式2
imgdata = imgdata.transpose(2,0,1)
print(imgdata.shape)
plt.imshow(imgdata)
plt.show()
Ⅲ.方式3
imgdata = imgdata.swapaxes(0,2)
print(imgdata.shape)
plt.imshow(imgdata)
plt.show()
imgdata = imgdata.swapaxes(0,1)
print(imgdata.shape)
plt.imshow(imgdata)
plt.show()
※ 附 录 ※
本文对于 numpy中的转置Transpose和.T以及轴对换swapaxis 中关于numpy矩阵的轴交换函数进行了测试。并对于深度学习中的图像数据进行处理。
- 参考文章:https://blog.csdn.net/qq1483661204/article/details/70543952
- 标签:11,arr,转置,Transpose,对换,transpose,维度,swapaxes,print
- 来源: https://blog.csdn.net/u014157109/article/details/89787623
■ 相关文献链接:
- AI Studio中的视觉数据集合
- numpy中的转置Transpose和.T以及轴对换swapaxis
● 相关图表链接:
- 图1.1 测试图片
- 图2.2.1 CIfar10图片
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST8.PY -- by Dr. ZhuoQing 2021-12-15
#
# Note:
#============================================================from headm import * # =
import shutilimport paddle
import paddle.nn.functional as F
from paddle import nn
from paddle.metric import accuracy as acc#------------------------------------------------------------
train_dataset = paddle.vision.datasets.Cifar10(mode='train')
fromfile = '/home/aistudio/.cache/paddle/dataset/cifar/cifar-10-python.tar.gz'
destfile = '/home/aistudio/data/cifar.tar.gz'shutil.copyfile(fromfile, destfile)#------------------------------------------------------------filename = '/home/aistudio/data/cifar-10-batches-py/data_batch_1'def unpickle(file):import _pickle as cPicklewith open(file, 'rb') as f:dict = cPickle.load(f, encoding='bytes')return dictd = unpickle(filename)#------------------------------------------------------------
imgdata = d[b'data'][0]printf(imgdata[0].shape)#------------------------------------------------------------imgdata = array(list(zip(imgdata[:1024],imgdata[1024:1024*2],imgdata[1024*2:]))).reshape(32,32,3)plt.imshow(imgdata)
plt.show()#------------------------------------------------------------imgdata = imgdata.swapaxes(0,1)
printf(imgdata.shape)
plt.imshow(imgdata)
plt.show()#------------------------------------------------------------
# END OF FILE : TEST8.PY
#============================================================
numpy中的转置Transpose和.T以及轴对换swapaxis相关推荐
- numpy中矩阵的转置_NumPy矩阵transpose()-Python中数组的转置
numpy中矩阵的转置 The transpose of a matrix is obtained by moving the rows data to the column and columns ...
- python中transpose函数_对numpy中的transpose和swapaxes函数详解
transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数. 我们看如下一个numpy的数组: `arr=np.arange(16).reshape(( ...
- 详解numpy中transpose()函数
今天在网上搜寻了许多博客,始终没有真正理解numpy中的transpose()函数, transpose 的原理其实是根据维度(shape)索引决定的,举个栗子: x = np.arange(4).r ...
- python transpose函数_转载:numpy中transpose和swapaxes函数讲解
看<利用python进行数据分析>,有些不大清楚numpy中transpose和swapaxes函数的原理,这篇文章写的比较清楚,转载过来方便个人随时阅读和温习 版权声明:本文为CSDN博 ...
- numpy维度交换_numpy之转置(transpose)和轴对换
转置(transpose)和轴对换 转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作). 转置有三种方式,transpose方法.T属性以及swapaxes方法. 1 .T,适用于一 ...
- Numpy中的transpose
Numpy中的transpose函数 标签:
- fun是什么意思 python中def_【python】 numpy中的矩阵转置(ndarray.T)为什么不加括号却可以实现方法的功能...
[python] numpy中的矩阵转置(ndarray.T)为什么不加括号却可以实现方法的功能 经过搜索和查询源码了解到,.T就是一个方法,但是是被装饰器修饰了一下... @property是pyt ...
- python中matrix函数_使用python解线性矩阵方程(numpy中的matrix类)
这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...
- 【Python进阶】你真的明白NumPy中的ndarray吗?
欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...
最新文章
- 单片机学习应用六大重要部分
- 深度探秘 Java 8 函数式编程(下)
- 学习SharePoint记录,微软给出的的Application Templates很有帮助呢
- 【机器学习实践】Jupyter Notebook安装 侧边导航栏功能 操作及其他常用扩展功能介绍...
- 关于文本分类(情感分析)的英文数据集汇总
- sap代加工流程图_委外加工_SAP的两种典型委外处理方法
- 职高的计算机平面设计一般学什么,职高形象设计学什么
- “职”等你来!阿里云2020年专场招聘来了
- Python | 自动回复微信祝福语
- html添加一条虚线垂直的,【html问题】在网页中添加垂直分割线
- 如何提升企业网络曝光率?
- 金融专业本科生毕业论文选题推荐?
- 一份 Git cheat sheet 送给您
- OpenVINO——3. OpenVINO文字识别OCR运行demo
- 为什么你总是喜欢强调出身
- Qt之设置BASLER相机参数
- ZOTERO链接word后word卡顿解决方法
- summernote复制无法保存图片问题
- FreeRTOS EFM32 中断配置
- vtigercrm的本土化