http://blog.csdn.net/yongh701/article/details/50283689

在Python的numpy中,对类似array=[[1,2,3],[4,5,6],[7,8,9]];的二维数组的转置,就一句话array.T。其实不使用numpy,单纯使用Python,代码也不长,同样也是一行。不过在此之前,先说明Python中map函数与zip(*)的使用。

一、map函数

首先Python中的map函数是很简单的。意为将第二个参数(一般是数组)中的每一个项,处理为第一个参数的类型。比如如下的代码,将a这个list的每一项都从int类型转化为str类型。

  1. #-*-coding:utf-8-*-
  2. a=[1,2,3];
  3. print map(str,a);
#-*-coding:utf-8-*-
a=[1,2,3];
print map(str,a);

运行结果如下:

而如下的数组,则对a这个二维数组中的每一个项的一维数组进行求和操作,最后得出来自然是一个一维数组,因为每一个项的一维数组,转化为一个int。

  1. #-*-coding:utf-8-*-
  2. a=[[1,3,4],[2,3,2]];
  3. print map(sum,a);
#-*-coding:utf-8-*-
a=[[1,3,4],[2,3,2]];
print map(sum,a);

运行结果如下:

二、zip(*)

在《【Python】用zip函数求欧氏距离、余弦相似度》(点击打开链接)中已经介绍了zip的使用,

比如下述的一段代码:

  1. #-*-coding:utf-8-*-
  2. x=[1,2,3];
  3. y=[4,5,6];
  4. z=[7,8,9];
  5. print zip(x,y,z);
#-*-coding:utf-8-*-
x=[1,2,3];
y=[4,5,6];
z=[7,8,9];
print zip(x,y,z);

运行结果如下:

意思是取各个list的第x项,作为返回的二维数组的第x项中的一维数组中的元素。

其实zip还是反过来会这个二维数组操作,但要注意写成zip(*),表示这是一个zip的逆操作。

比如下述的一段代码:

  1. # -*-coding:utf-8-*-
  2. array=[[1,4,7],[2,5,8],[3,6,9]];
  3. x,y,z=zip(*array);
  4. print x,y,z;
# -*-coding:utf-8-*-
array=[[1,4,7],[2,5,8],[3,6,9]];
x,y,z=zip(*array);
print x,y,z;

xyz的值分别如下所示,恰好与zip函数形成一个逆操作。

三、python中二维数组的转置

这与数组转置有什么相关呢?

注意到,如果zip(*array)不经过x,y,z=zip(*array);拆分成x,y,z三个变量,那么[[1,4,7],[2,5,8],[3,6,9]];被zip(*array)之后的结果恰好是[(1, 2, 3), (4, 5, 6), (7, 8, 9)],刚好形成一个转置的关系。这对于所有array=[[1,2,3],[4,5,6],[7,8,9]];的二维数组都是一样的,不信可以试试。

当然[(1, 2, 3), (4, 5, 6), (7, 8, 9)]还不是我们需要的最后的结果,

因为只是一个存放tuple的list,我们要保持原来list是存list的一致性,所以要应用到上方的map函数。

因此对于一个数组的转置,代码如下:

  1. # -*-coding:utf-8-*-
  2. array = [[1, 4], [2, 5], [3, 6]];
  3. print map(list, zip(*array));
# -*-coding:utf-8-*-
array = [[1, 4], [2, 5], [3, 6]];
print map(list, zip(*array));

运行结果如下:

【Python】无须numpy,利用map函数与zip(*)函数对数组转置(转)的更多相关文章

  1. python中lambda,map,reduce,filter,zip函数

    函数式编程 函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.简单来讲,函 ...

  2. Python面试题之Python中的lambda map filter reduce zip

    当年龟叔想把上面列出来的这些都干掉.在 “All Things Pythonic: The fate of reduce() in Python 3000”这篇文章中,他给出了自己要移除lambda. ...

  3. day17—max, map, reduce, filter, zip 函数的使用

    一.max 函数 l=[3,2,100,999,213,1111,31121,333] print(max(l)) # dic={'k1':10,'k2':100,'k3':30} print(max ...

  4. python 3.6.5 map() max() lambda匿名函数

    python 3.6.5 sample: map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 functi ...

  5. 【转】python 中NumPy和Pandas工具包中的函数使用笔记(方便自己查找)

    二.常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准 ...

  6. python 中NumPy和Pandas工具包中的函数使用笔记(方便自己查找)

    二.常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准 ...

  7. Python中的zip()与*zip()函数详解

    前言 实验环境: Python 3.6: 示例代码地址:下载示例: 本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables)函数详解 ...

  8. Pythonh中的zip()与*zip()函数详解

    前言 实验环境: Python 3.6: 示例代码地址:下载示例: 本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables)函数详解 ...

  9. python3 匿名函数,map/reduce/filter等函数结合应用

    匿名函数就是不需要显式的指定函数 # 平方函数 def func1(x): return x**2 print(func1) # 平方函数匿名函数写法 func2=lambda x:x**2 prin ...

随机推荐

  1. request.getRequestDispatcher("").forward()中文乱码

    即使jsp页面的编码已设为“UTF-8”,有中文的地方还是会出现乱码,但是用response.sendRedirect不会出现此问题. 解决方案一: 不使用PrintWriter out=respon ...

  2. the difference between an embOS interrupt and a zero latency interrupt

    the difference between an embOS interrupt and a zero latency interrupt is the interrupt priority lev ...

  3. 百度地图api---实现新建地图

    调用这个函数 function refresh() { history.go(0);   } 实现了地图新建

  4. javascript 编辑网页

    javascript:document.body.contentEditable='true';document.designMode='on'; void 0 出处:http://zhidao.ba ...

  5. WebLogic使用总结(七)——WebLogic部署Web应用并绑定域名

    一.在WebLogic中创建一个虚拟主机 找到虚拟主机面板,如下图所示:

  6. In-Place upgrade to Team Foundation Server (TFS) 2015 from TFS 2013Team Foundation Server TFS TFS 2015 TFS upgrade TFS with Sharepoint

    This upgrade document gives detailed step by step procedure for the In-Place upgrade from TFS 2013 t ...

  7. 使用Axure RP原型设计实践06,登录验证

    登录验证主要功能包括: ● 用户名错误,提示无效用户名,用户名和密码文本框清空● 用户名存在,密码错误,提示密码错误,密码清空,焦点进入密码框● 用户名和密码都正确,验证通过 本篇接着"使用 ...

  8. 线程池大小设置,CPU的核心数、线程数的关系和区别,同步与堵塞完全是两码事

    线程池应该设置多少线程合适,怎么样估算出来.最近接触到一些相关资料,现作如下总结. 最开始接触线程池的时候,没有想到就仅仅是设置一个线程池的大小居然还有这么多的学问,汗颜啊. 首先,需要考虑到线程池所 ...

  9. 怎样连接REDIS服务端

    怎样连接REDIS服务端 REDIS服务器是TCP/IP SERVER,因此客户端要访问,必须先同服务器建立SOCKET连接,然后才可以发送各种REDIS COMMAND(指令). 首先要引用单元文件 ...

  10. INDY10的IDHttpServer应答客户端

    INDY10的IDHttpServer应答客户端 首先贴源码: procedure TIdHTTPResponseInfo.WriteContent; begin if not HeaderHasBe ...