如何用python实现行列互换?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用python实现行列互换?相关的知识,希望对你有一定的参考价值。

题主既然问出行列转换这样的问题,那就说明题主的Python功力远远不到家的。行列互换其实在Python中很快捷的就可以实现了。

首先,让我们来建立一个矩阵,这里我们使用numpy包下的random包来生成3×3的矩阵。大概的代码如下所示:

import numpy as np

a=np.random.random((3,3))

这样,我们就可以生成一个随机数组成的3×3矩阵。之后我们就可以将这个矩阵进行行列互换了。具体代码也非常的简单,具体如下所示:

b=a.T

如上所示,只需要对a对象进行T操作,就可将我们的数据进行行列转换了。

所以,题主在学习的时候,一定要学会用简单的方法去解决复杂的问题。而不要将自己的问题复杂化,就如同楼上某位同学写的代码那样,明显太复杂了。本来三行代码能够实现的功能,搞得如此纠结。

另外,如果题主想进入数据分析行业,我推荐一本Python的相关书籍给你,这本书可以让你掌握一些常见的数据整理、数据清洗操作。这本书的名字是《利用Python进行数据分析》,该书作者是高效数据分析包Pandas的开发者,对数据分析基本技能的提升作用显著。

如果有什么想与我交流的,欢迎在本题下进行评论。

参考技术A

Python作为一种功能强大的程序编辑器,实现行列转换是它的基础功能,当然行列转换有很多应用,这里介绍如何实现行列转换。在Python的主界面边可以实现操作,但是要以矩阵的形式出现,例如>>a=[[1,2,3],[2,3,4]]按下Enter键。>>输入print map(list,zip(*a))按下Enter键即可。Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中[3]  有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。7月20日,IEEE发布2017年编程语言排行榜:Python高居首位。

sample input:

1   2   3   4   5

6   7   8   9   10

11  12  13  14  15

program:

with open(\'in.txt\') as f:

  lis = [x.split() for x in f]

for x in zip(*lis):

  for y in x:

    print(y+\'\\t\', end=\'\')

  print(\'\\n\')

output:

1   6   11  

2   7   12  

3   8   13  

4   9   14  

5   10  15

参考技术B

Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是其非开标识 放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。

参考技术C

Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。

报表如何实现行列互换效果?

通常我们设计的二维的交叉报表,横向的维度和纵向的维度是固定的,而用户希望更希望能根据自己的需要快速转换横向纵向维度来查看报表。

技术图片

如上图所示,我们通过点击一个按钮或文字,就可将报表的行列维度互相转换,这样的动态转换效果要怎么设置实现呢?

这里我介绍两种方法实现方法:

1. 两张报表超链接

2. 单张报表动态判断

两张报表超链接

实现思路:

二维的交叉报表行列维度有两种情况,我们只需对应两种情况做两张报表,切换的按钮用超链接实现,连接的目标就是另一张报表。

具体实现:

1. 新建一张报表,文件名为行列转换 1.rpx, 数据源使用润乾设计器下自带的 demo 数据源,数据集使用 SQL 检索方式,SQL 为:SELECT 订单. 货主地区,  订单. 订单金额, 雇员. 姓氏 + 雇员. 名字 as 雇员  FROM 订单, 雇员 WHERE    订单. 雇员 ID = 雇员. 雇员 ID 。

技术图片

2. 设置报表单元格表达式,润乾设计器中单元格可以直接写表达式,也支持拖拽字段生成表达式。

B1 单元格我们通过拖拽字段的方式生成表达式:在设计器右下角的数据集面板中可以看到我们刚才新建的数据集和字段,选择对应字段,然后选择分组,将字段拖拽到 B1 单元格中,

B1 单元格就会出现 =ds1.group(货主地区; 货主地区);

技术图片

A2 单元格同 B1 的操作,不同的是选择雇员字段拖拽,生成的表达式为 =ds1.group(雇员; 雇员:1);

B2 单元格选择订单金额,选择汇总,汇总方式为求和,拖拽字段到 B2 单元格中,表达式为 =ds1.sum(订单金额)。

技术图片

3. 修改单元格扩展方式,单元格的扩展方向默认为纵向,选中 B1,在右侧属性面板中设置扩展方式为横向扩展。

技术图片

4.A1 单元格中直接写上行列互换,设置超链接表达式:“./showReport.jsp?rpx=/30 交互报表 / 行列互换 2.rpx”,超链接窗口为:_self。

技术图片

5. 将当前报表另存一张,保存文件名为“行列转换 2.rpx”,将 B1 和 A2 单元格表达式对调,将 A1 的超链接表达式修改为:“./showReport.jsp?rpx=/30 交互报表 / 行列互换 1.rpx”。

经过以上设置,我们就完成了最不烧脑的二维报表行列互换报表的制作,使用 showReport.jsp 访问行列转换 1.rpx,点击行列转换那几个字就会变成行列转换 2.rpx,用户尽管点击切换,不用做条件判断。

单张报表动态判断

实现思路:

根据标志 flag 当前值,来改变他的值,根据这个值确定横向分组和纵向分组使用的字段。

具体实现

1. 将行列转换 1.rpx 另存一个报表,文件名为行列转换.rpx。

2. 报表中增加一个普通参数,参数名称为 change, 数据类型为整数,默认的参数值为 1;

两个动态参数:参数名称 group1, 数据类型为字符串,值表达式为 if(change==1,“货主地区”,“雇员”;

参数名称 Group2, 数据类型为字符串,值表达式为 if(change==1,“雇员”,“货主地区”)。

技术图片

3. 修改单元格表达式

横向分组和纵向分组的字段通过动态参数的值,动态变化,将 B1 的表达式修改为 =ds1.group(${group1};${group1}:1),将 A2 的表达式修改为 =ds1.group(${group2};${group2}:1)。

技术图片

4. 修改行列互换的超链接表达式

超链接表达式为:“./showReport.jsp?rpx=/30 交互报表 / 行列互换.rpx&change=”+if(change==1,-1,1)

技术图片

经过以上设置,我们通过 showReport.jsp 访问行列转换.rpx, 在浏览器地址栏中,输入 url:

http://localhost:6868/demo/reportJsp/showReport.jsp?rpx=/30 交互报表 / 行列转换.rpx访问。

技术图片

当点击表头中的行列转换文字,刷新的报表还是当前的报表,但 change 的参数值已经变成了 -1,并且行列的分组字段也发生了变化。

技术图片

通过上面介绍的两种方法都能快速的实现报表行列互换的效果,如果不想做多张报表来实现,推荐使用第二种实现方法,如果不习惯条件判断的设置,可以使用第一种方法,虽然涉及到两张报表,只是另存第一张报表,简单修改就行,修改的工作量可忽律不计,也没有第二种方法的小弯弯绕,具体根据自己的情况选择合适的方法吧。

以上是关于如何用python实现行列互换?的主要内容,如果未能解决你的问题,请参考以下文章

报表如何实现行列互换效果?

如何用Pivot实现行列转换

SQL 实现行列互换

如何用Python3来实现ping功能

如何用python实现各种数据结构

如何用Python实现杨辉三角和心