高维度时np.transpose与np.reshape的用法_咸鱼半条的博客-程序员ITS401_np.reshape(np.transpose(np.reshape(result, (3, 513

技术标签: Python 小知识  

今天遇到一个数组按照排布规律转变为4个数组的方法,通过转置与重塑在高维度实现,源代码如下:

def downsample_subpixel_new(x,downscale=2):
    [b, h, w, c] = x.get_shape().as_list()
    s = downscale
    if h%s != 0 or w%s != 0:
        print('!!!!Notice: the image size can not be downscaled by current scale')
        exit()
    x_1 = tf.transpose(x, [0, 3, 1, 2])
    x_2 = tf.reshape(x_1, [b, c, h, w // s, s])
    x_3 = tf.reshape(x_2, [b, c, h // s, s, w // s, s])
    x_4 = tf.transpose(x_3, [0, 1, 2, 4, 3, 5])
    x_5 = tf.reshape(x_4, [b, c, h // s, w // s, s * s])
    x_6 = tf.transpose(x_5, [0, 2, 3, 1, 4])
    x_output = tf.reshape(x_6, [b, h // s, w // s, s * s * c])
    return x_output

上面代码实现的效果为下图左边一个数组变为右边四个数组:


其中transpose为转置,数组相应维度进行交换

reshape重塑数组形状,从最后数组一维开始重塑,当维度较小时容易理解,维度超过三维时以下面例子直观展示:

为便于观察,假设开始时数组a为1到16的数字组成的维度为[1,4,4,1]的数组

>>> a=np.array([[[[1],[2],[3],[4]],[[5],[6],[7],[8]],[[9],[10],[11],[12]],[[13],[14],[15],[16]]]])
>>> a
array([[[[ 1],
         [ 2],
         [ 3],
         [ 4]],

        [[ 5],
         [ 6],
         [ 7],
         [ 8]],

        [[ 9],
         [10],
         [11],
         [12]],

        [[13],
         [14],
         [15],
         [16]]]])
>>> a.shape
(1, 4, 4, 1)
>>> a1=np.transpose(a,[0,3,1,2])
>>> a1
array([[[[ 1,  2,  3,  4],
         [ 5,  6,  7,  8],
         [ 9, 10, 11, 12],
         [13, 14, 15, 16]]]])
>>> a2=np.reshape(a1,[1,1,4,2,2])
>>> a2
array([[[[[ 1,  2],
          [ 3,  4]],

         [[ 5,  6],
          [ 7,  8]],

         [[ 9, 10],
          [11, 12]],

         [[13, 14],
          [15, 16]]]]])
>>> a3=np.reshape(a2,[1,1,2,2,2,2])
>>> a3
array([[[[[[ 1,  2],
           [ 3,  4]],

          [[ 5,  6],
           [ 7,  8]]],


         [[[ 9, 10],
           [11, 12]],

          [[13, 14],
           [15, 16]]]]]])
>>> a4=np.transpose(a3,[0,1,2,4,3,5])
>>> a4
array([[[[[[ 1,  2],
           [ 5,  6]],

          [[ 3,  4],
           [ 7,  8]]],


         [[[ 9, 10],
           [13, 14]],

          [[11, 12],
           [15, 16]]]]]])
>>> a5=np.reshape(a4,[1,1,2,2,4])
>>> a5
array([[[[[ 1,  2,  5,  6],
          [ 3,  4,  7,  8]],

         [[ 9, 10, 13, 14],
          [11, 12, 15, 16]]]]])
>>> a6=np.transpose(a5,[0,2,3,1,4])
>>> a6
array([[[[[ 1,  2,  5,  6]],

         [[ 3,  4,  7,  8]]],


        [[[ 9, 10, 13, 14]],

         [[11, 12, 15, 16]]]]])
>>> a7=np.reshape(a6,[1,2,2,4])
>>> a7
array([[[[ 1,  2,  5,  6],
         [ 3,  4,  7,  8]],

        [[ 9, 10, 13, 14],
         [11, 12, 15, 16]]]])
可以看到a7数组已经完成了规律的下采样,其中1,3,9,11坐标的像素对应右图第一个数组
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wgx571859177/article/details/80999133

智能推荐

[配置实例]三层交换机组播配置实例_weixin_34390105的博客-程序员ITS401

「配置环境参数」  1. 组播服务器地址为192.168.0.10/24,网关为192.168.0.1/24  2. 三层交换机SwitchA通过上行口G1/1连接组播服务器,交换机连接组播服务器接口interface vlan 100,地址为192.168.0.1.  3. vlan10和vlan20下挂两个二层交换机SwitchB和SwitchC,地址为10.10.10.1/24和10.10....

GitLab汉化版搭建_响彻天堂丶的博客-程序员ITS401_搭建中文gitlab

1 环境安装yum -y install lokkityum -y install curl openssh-server openssh-clients postfix cronie service postfix start chkconfig postfix on lokkit -s http -s ssh2 使用rpm包安装rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.4.4-

ccfcsp-20181201-小明上学-JAVA语言_Dejavuu的博客-程序员ITS401

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main01 {// 此题目需要明确两点:// 1.看到k=2=黄灯时,需要等待t+r秒// 2.看到k=3=绿灯时不需要等待t秒,直接使用下一行k=0时的t秒 public ...

安装VMwareTools_明月5826的博客-程序员ITS401

VMwareTools安装步骤以及错误解决方案

vue自定义指令之图片加载失败_唐鹏程的博客-程序员ITS401

说到图片加载失败,我们都会想到这样处理<img src="/img/covers.png" alt="封面" onerror="javascript:this.src='/img/default.png'">这样处理没问题,但如果放到项目中,几十上百个页面,一个一个加,就太重复了;而且还有个问题,如果图片很大,加载时间过长,也会严重影响用户体验,所以,这里需要同时解决两个问题:1、在图片加载出来之前,给一个默认图片2、图片加载失败,用默认图片来代替回到代码层面,..

hdmi接口有什么用_【科普】你的电脑为什么没有HDMI接口?_weixin_39644713的博客-程序员ITS401

本文转载自中科院半导体所,谢谢。一引入胜Type A HDMI (card from wiki)想知道为什么没有HDMI接口?我也不罗嗦,估计是你的显卡不行。显卡,顾名思义,就是显示卡,处理显示的信息,你所能看到屏幕上的像素,就是由显卡下达指令才能组成图像。目前电脑的显卡一共分为三类:核显,集显,独显。核显是集成于CPU内部的显卡,集显是集成于主板的显卡,,独显又叫独立显卡。总...

随便推点

如何使用 Golang 日志监控你的应用程序?_云计算运维工程师的博客-程序员ITS401

你是否厌烦了那些使用复杂语言编写的、难以部署的、总是在不停构建的解决方案?Golang 是解决这些问题的好方法,它和 C 语言一样快,又和 Python 一样简单。但是你是如何使用 Golang 日志监控你的应用程序的呢?Golang 没有异常,只有错误。因此你的第一印象可能就是开发 Golang 日志策略并不是一件简单的事情。不支持异常事实上并不是什么问题,异常在很多编程语言中已经失去了其异常性...

matlab用辛普森公式求积分_积分近似计算之辛普森公式_weixin_39726131的博客-程序员ITS401

对于积分区间[a, b],若则成立辛普森公式辛普森公式可看作是改良的梯形公式。梯形公式是以直线逼近实际曲线,而辛普森公式则以二次曲线(即抛物线)逼近。以二次曲线逼近实际曲线根据辛普森公式可得各积分小区间内的积分值如下式所示:其中于是,全积分区间[a, b]的积分值为为便于计算机计算,上式可写成其中C语言程序实现辛普森公式计算积分计算积分代码//simpson.c#include #include ...

改变超链接样式_一七得七的博客-程序员ITS401

采用CSS伪类改变超链接的样式1.未访问的链接:a:link { color:#008B8B; text-decoration: none;//取消下划线 } 2.已访问的链接:a:visited{ color:#008B8B; text-decoration: none;}3.鼠标移动到链接上:a:hover{ color:#69696

JavaScript实现计算器(菜鸟狗头保命)_搬砖小浩浩的博客-程序员ITS401

JavaScript 计算器一、实现功能二、展示1.代码展示2.效果展示3.总结一、实现功能(1)利用css样式、javascript语言和html语言实现计算器的算法(2)对计算器的页面进行规划以及对界面进行颜色的填涂(3)对界面各个边框边距进行适当的调整二、展示1.代码展示代码如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <met

yoloV5训练中出现的错误及解决方法_王吉吉丫的博客-程序员ITS401

错误:pairplot() got an unexpected keyword argument 'corner'解决:将 sns.pairplot(x, corner=True, diag_kind='auto', kind='hist', diag_kws=dict(bins=50), plot_kws=dict(pmax=0.9)) 改为 sns.pairplot(x, diag_kind='auto', kind='hist', diag_kws=dict(bins...

一个关于时钟的非常简单的小例子_xd_code的博客-程序员ITS401

在View类中:第一步:View.h中:声明:int   x;第二步:View.cpp中:void CScrollTextView::OnDraw(CDC* pDC){ CScrollTextDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc)  return;    TRACE("this is a lit

推荐文章

热门文章

相关标签