简 介: 本文对于 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

关键词矩阵轴交换

#mermaid-svg-38kyktul194Z8c9M {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-38kyktul194Z8c9M .error-icon{fill:#552222;}#mermaid-svg-38kyktul194Z8c9M .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-38kyktul194Z8c9M .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-38kyktul194Z8c9M .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-38kyktul194Z8c9M .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-38kyktul194Z8c9M .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-38kyktul194Z8c9M .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-38kyktul194Z8c9M .marker{fill:#333333;stroke:#333333;}#mermaid-svg-38kyktul194Z8c9M .marker.cross{stroke:#333333;}#mermaid-svg-38kyktul194Z8c9M svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-38kyktul194Z8c9M .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-38kyktul194Z8c9M .cluster-label text{fill:#333;}#mermaid-svg-38kyktul194Z8c9M .cluster-label span{color:#333;}#mermaid-svg-38kyktul194Z8c9M .label text,#mermaid-svg-38kyktul194Z8c9M span{fill:#333;color:#333;}#mermaid-svg-38kyktul194Z8c9M .node rect,#mermaid-svg-38kyktul194Z8c9M .node circle,#mermaid-svg-38kyktul194Z8c9M .node ellipse,#mermaid-svg-38kyktul194Z8c9M .node polygon,#mermaid-svg-38kyktul194Z8c9M .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-38kyktul194Z8c9M .node .label{text-align:center;}#mermaid-svg-38kyktul194Z8c9M .node.clickable{cursor:pointer;}#mermaid-svg-38kyktul194Z8c9M .arrowheadPath{fill:#333333;}#mermaid-svg-38kyktul194Z8c9M .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-38kyktul194Z8c9M .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-38kyktul194Z8c9M .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-38kyktul194Z8c9M .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-38kyktul194Z8c9M .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-38kyktul194Z8c9M .cluster text{fill:#333;}#mermaid-svg-38kyktul194Z8c9M .cluster span{color:#333;}#mermaid-svg-38kyktul194Z8c9M div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-38kyktul194Z8c9M :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

矩阵轴交换
目 录
Contents
为什么需要交换矩阵?
两种轴交换方法
图像处理
10数据集合
显示图片
附 录

§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相关推荐

  1. numpy中矩阵的转置_NumPy矩阵transpose()-Python中数组的转置

    numpy中矩阵的转置 The transpose of a matrix is obtained by moving the rows data to the column and columns ...

  2. python中transpose函数_对numpy中的transpose和swapaxes函数详解

    transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数. 我们看如下一个numpy的数组: `arr=np.arange(16).reshape(( ...

  3. 详解numpy中transpose()函数

    今天在网上搜寻了许多博客,始终没有真正理解numpy中的transpose()函数, transpose 的原理其实是根据维度(shape)索引决定的,举个栗子: x = np.arange(4).r ...

  4. python transpose函数_转载:numpy中transpose和swapaxes函数讲解

    看<利用python进行数据分析>,有些不大清楚numpy中transpose和swapaxes函数的原理,这篇文章写的比较清楚,转载过来方便个人随时阅读和温习 版权声明:本文为CSDN博 ...

  5. numpy维度交换_numpy之转置(transpose)和轴对换

    转置(transpose)和轴对换 转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作). 转置有三种方式,transpose方法.T属性以及swapaxes方法. 1 .T,适用于一 ...

  6. Numpy中的transpose

    Numpy中的transpose函数 标签: 

  7. fun是什么意思 python中def_【python】 numpy中的矩阵转置(ndarray.T)为什么不加括号却可以实现方法的功能...

    [python] numpy中的矩阵转置(ndarray.T)为什么不加括号却可以实现方法的功能 经过搜索和查询源码了解到,.T就是一个方法,但是是被装饰器修饰了一下... @property是pyt ...

  8. python中matrix函数_使用python解线性矩阵方程(numpy中的matrix类)

    这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...

  9. 【Python进阶】你真的明白NumPy中的ndarray吗?

    欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...

最新文章

  1. 单片机学习应用六大重要部分
  2. 深度探秘 Java 8 函数式编程(下)
  3. 学习SharePoint记录,微软给出的的Application Templates很有帮助呢
  4. 【机器学习实践】Jupyter Notebook安装 侧边导航栏功能 操作及其他常用扩展功能介绍...
  5. 关于文本分类(情感分析)的英文数据集汇总
  6. sap代加工流程图_委外加工_SAP的两种典型委外处理方法
  7. 职高的计算机平面设计一般学什么,职高形象设计学什么
  8. “职”等你来!阿里云2020年专场招聘来了
  9. Python | 自动回复微信祝福语
  10. html添加一条虚线垂直的,【html问题】在网页中添加垂直分割线
  11. 如何提升企业网络曝光率?
  12. 金融专业本科生毕业论文选题推荐?
  13. 一份 Git cheat sheet 送给您
  14. OpenVINO——3. OpenVINO文字识别OCR运行demo
  15. 为什么你总是喜欢强调出身
  16. Qt之设置BASLER相机参数
  17. ZOTERO链接word后word卡顿解决方法
  18. summernote复制无法保存图片问题
  19. FreeRTOS EFM32 中断配置
  20. vtigercrm的本土化

热门文章

  1. HDU 2094:产生冠军(拓扑排序)
  2. BeanShell脚本接口之匿名类
  3. sicp 4.2.1两题
  4. POJ 2356 Find a multiple (抽屉原理)
  5. 解决xmarks不能用的方法
  6. Java 中的 XML:Java 文档模型的用法
  7. Typescript,Vue you enjoy it ?
  8. Centos下源码安装git
  9. hadoop之 Zookeeper 分布式应用程序协调服务
  10. Android启动脚本init.rc(2)