numpy array转置与两个array合并
我们知道,用 .T 或者 .transpose() 都可以将一个矩阵进行转置。
但是一维数组转置的时候有个坑,光transpose没有用,需要指定shape参数,
在array中,当维数>=2,时这个成立,但=1时,就不成立了,如:
In [7]: y
Out[7]: array([0, 0, 0, 0, 0])
In [14]: y.T
Out[14]: array([0, 0, 0, 0, 0])
In [15]: y.transpose()
Out[15]: array([0, 0, 0, 0, 0])
这个时候我们得用 .reshape() 来指定维度大小从而转置:
In [17]: y.reshape([5,1])
Out[17]:
array([[0],
[0],
[0],
[0],
[0]])
我们再写一个通用的转置方法:
In [21]: y.reshape([y.shape[0],1])
Out[21]:
array([[0],
[0],
[0],
[0],
[0]])
注意, y.T 之后也不是一个简单的一维数组,而是一个shape为(1, y.shape[0])的二维数组:
In [26]: y.T
Out[26]: array([[0, 0, 0, 0, 0]])
In [27]: y.shape
Out[27]: (5L, 1L)
或者是还有如下写法:对一维数组通过 .reshape(1, -1).T
In [44]: yt
Out[44]: array([0, 0, 0, 0, 0])
In [45]: yt.reshape(1, -1)
Out[45]: array([[0, 0, 0, 0, 0]])
In [46]: yt.reshape(1, -1).T
Out[46]:
array([[0],
[0],
[0],
[0],
[0]])
---------------------------------------------------------------合并-----------------------------------------------------------------
In [5]: x
Out[5]:
array([[ 5.1, 3.5, 1.4, 0.2],
[ 4.9, 3. , 1.4, 0.2],
[ 4.7, 3.2, 1.3, 0.2],
[ 4.6, 3.1, 1.5, 0.2],
[ 5. , 3.6, 1.4, 0.2]])
现在我们对x,y左右合并: x|y
In [25]: np.hstack((x, y)) # 合并array, 水平方向
# 保证两者长度(上到下)相等
Out[25]:
array([[ 5.1, 3.5, 1.4, 0.2, 0. ],
[ 4.9, 3. , 1.4, 0.2, 0. ],
[ 4.7, 3.2, 1.3, 0.2, 0. ],
[ 4.6, 3.1, 1.5, 0.2, 0. ],
[ 5. , 3.6, 1.4, 0.2, 0. ]])
x,y上下合并
In [51]: y.T[0,:4] # 这里这个只是我引入的一个中间量确保他们的长度相同
Out[51]: array([0, 0, 0, 0])
In [37]: np.vstack((x, y.T[0,:4])) # 这里要保证两者长度(左到右)相等
Out[37]:
array([[ 5.1, 3.5, 1.4, 0.2],
[ 4.9, 3. , 1.4, 0.2],
[ 4.7, 3.2, 1.3, 0.2],
[ 4.6, 3.1, 1.5, 0.2],
[ 5. , 3.6, 1.4, 0.2],
[ 0. , 0. , 0. , 0. ]])
然后numpy提供了numpy.concatenate((a1,a2,...), axis=0)函数。能够一次完成多个数组的拼接。其中a1,a2,...是数组类型的参数
但是用 np.concatenate((x, y.T[0,:4]),axis=0) 则会报错,原因是y.T[0,:4]的维度为(4, )
如果将
In [57]: y.T[0,:4].reshape(1,y.T[0,:4].shape[0]) # 变成(1, 4)
Out[57]: array([[0, 0, 0, 0]])
上面那个我就懒得引入中间变量了,就这样直接写入
In [59]: np.concatenate((x, y.T[0,:4].reshape(1,y.T[0,:4].shape[0])),axis=0)
Out[59]:
array([[ 5.1, 3.5, 1.4, 0.2],
[ 4.9, 3. , 1.4, 0.2],
[ 4.7, 3.2, 1.3, 0.2],
[ 4.6, 3.1, 1.5, 0.2],
[ 5. , 3.6, 1.4, 0.2],
[ 0. , 0. , 0. , 0. ]])
可以看到拼接成功,即(a, b)的shape一定要满足(am, an) (bm, bn) 中an=bn
而对于axis=1(左右拼接),则shape一定要满足(am, an) (bm, bn) 中am=bm
In [61]: x
Out[61]:
array([[ 5.1, 3.5, 1.4, 0.2],
[ 4.9, 3. , 1.4, 0.2],
[ 4.7, 3.2, 1.3, 0.2],
[ 4.6, 3.1, 1.5, 0.2],
[ 5. , 3.6, 1.4, 0.2]]) In [62]: y
Out[62]:
array([[0],
[0],
[0],
[0],
[0]]) In [63]: np.concatenate((x, y),axis=1)
Out[63]:
array([[ 5.1, 3.5, 1.4, 0.2, 0. ],
[ 4.9, 3. , 1.4, 0.2, 0. ],
[ 4.7, 3.2, 1.3, 0.2, 0. ],
[ 4.6, 3.1, 1.5, 0.2, 0. ],
[ 5. , 3.6, 1.4, 0.2, 0. ]]) In [64]: x.shape,y.shape
Out[64]: ((5L, 4L), (5L, 1L))
然后这篇文章讲的也不错: http://blog.csdn.net/pipisorry/article/details/39496831
numpy array转置与两个array合并的更多相关文章
- 「Python」Numpy equivalent of MATLAB's cell array
转自Stackoverflow.备忘用. Question I want to create a MATLAB-like cell array in Numpy. How can I accompli ...
- [Python Cookbook] Numpy: Multiple Ways to Create an Array
Convert from list Apply np.array() method to convert a list to a numpy array: import numpy as np myl ...
- numpy数组转置与轴变换
numpy数组转置与轴变换 矩阵的转置 >>> import numpy as np >>> arr=np.arange(15).reshape((3,5)) &g ...
- Java中如何把两个数组合并为一个
在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁,却还是值得思考的.这里介绍四种方法,请参考选用. 一.apache-commons 这是 ...
- Java实现把两个数组合并为一个的方法总结
本文实例讲述了Java实现把两个数组合并为一个的方法.分享给大家供大家参考,具体如下: 在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁, ...
- 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝
第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...
- 数组去重,排序,重复次数,两个数组合并,两个数组去重,map(),filter(),reduce()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Why is processing a sorted array faster than an unsorted array?
这是我在逛 Stack Overflow 时遇见的一个高分问题:Why is processing a sorted array faster than an unsorted array?,我觉得这 ...
- linux 两个文件合并
可以使用cat命令,有两种实现的方式,一种将两个文件合并的到一个新的文件,另一种将一个文件追加到另一个文件的末尾. 方法一:使用cat命令从文件中读入两个文件,然后将重定向到一个新的文件.这种方法可以 ...
随机推荐
- AtCoder Express(数学+二分)
D - AtCoder Express Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement In ...
- mysql 日期加减天数
MySQL 为日期增加一个时间间隔:date_add() now() //now函数为获取当前时间 select date_add(now(), interval 1 day); - 加1 ...
- 关于微信小程序的开发步骤
~~~~包子最近在研究小程序 首先先讲一下小程序一些基本的步骤: 1.登录微信的公众平台,选择小程序,注册一个账号,期间有碰到什么交300块钱的就不要理他,因为我只是做demo,当然,准备上线的企业啥 ...
- JavaScript基础深入之
JS的数值类型是分为两类:基本数据类型和引用数据类型. 基本类型占据的内存栈空间,引用类型被保存在堆空间.引用类型赋值的变量也是被保存在栈空间的,它的作用类似于电视遥控器,负责操作堆空间内指向的对象. ...
- Spring3.2.11与Quartz2.2.1整合时内存泄漏的问题的解决
Quartz是一款定时任务调度的开源框架,使用起来比较方便.并且Spring的support包对Quartz有集成.但是笔者在web应用使用的过程中却遇到了内存泄漏的问题. 问题的产生 笔者在使用Sp ...
- 九度OJ 1359:大魏树遍历 (树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:299 解决:29 题目描述: 大魏是JOBDU技术组里最喜欢折腾的一个了,单反.骑车.改九度页面,当然还有YY prado.我们姑且先把这些 ...
- coursera 《现代操作系统》 -- 第四周 处理器调度
优先级反转 这往往出现在一个高优先级任务等待访问一个被低优先级任务正在使用的临界资源,从而阻塞了高优先级任务:同时,该低优先级任务被一个次高优先级的任务所抢先,从而无法及时地释放该临界资源.这种情况下 ...
- [转载]MySQL concat函数的使用
MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...
- mysql学习笔记—常用sql语句
sql注意事项: SQL 对大小写不敏感:SELECT 与 select 是相同的 某些数据库系统要求在每条 SQL 语句的末端使用分号. CREATE DATABASE CREATE DATABAS ...
- ABAP重点各种接口技术
转自 http://www.cnblogs.com/penley/archive/2008/11/12/1332140.html 下面总结一下ABAP中的各种接口技术,因为学习时间不是很长,肯定还不全 ...