我们知道,用 .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合并的更多相关文章

  1. 「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 ...

  2. [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 ...

  3. numpy数组转置与轴变换

    numpy数组转置与轴变换 矩阵的转置 >>> import numpy as np >>> arr=np.arange(15).reshape((3,5)) &g ...

  4. Java中如何把两个数组合并为一个

    在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁,却还是值得思考的.这里介绍四种方法,请参考选用. 一.apache-commons 这是 ...

  5. Java实现把两个数组合并为一个的方法总结

    本文实例讲述了Java实现把两个数组合并为一个的方法.分享给大家供大家参考,具体如下: 在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁, ...

  6. 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝

    第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...

  7. 数组去重,排序,重复次数,两个数组合并,两个数组去重,map(),filter(),reduce()

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. Why is processing a sorted array faster than an unsorted array?

    这是我在逛 Stack Overflow 时遇见的一个高分问题:Why is processing a sorted array faster than an unsorted array?,我觉得这 ...

  9. linux 两个文件合并

    可以使用cat命令,有两种实现的方式,一种将两个文件合并的到一个新的文件,另一种将一个文件追加到另一个文件的末尾. 方法一:使用cat命令从文件中读入两个文件,然后将重定向到一个新的文件.这种方法可以 ...

随机推荐

  1. 1624 取余最长路(set)

    1624 取余最长路 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 佳佳有一个n*m的带权矩阵,她想从(1,1)出发走到(n,m)且只能往右往下移动,她能得到的娱 ...

  2. Strange Optimization(扩展欧几里得)

    Strange Optimization Accepted : 67   Submit : 289 Time Limit : 1000 MS   Memory Limit : 65536 KB Str ...

  3. D - Find a way

    D - Find a way Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  4. C语言结构体数组内带字符数组初始化和赋值

    1.首先定义结构体数组: typedef struct BleAndTspRmtCmd{ char terminal[3]; char note[3]; char rmtCmd[10]; char c ...

  5. 解决IIS部署网站引用woff/woff2/svg字体报404错误

    一.问题 在IIS上部署网站,网页引用woff字体时,浏览器报“找不到woff.woff2字体”.“404”错误,不仅预设的字体加载不出来,还影响网页加载速度. 二.原因 IIS默认设置情况下不识别. ...

  6. spring和hibernate整合时设置自动生成数据库的表

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFa ...

  7. 1.Configure the mongo Shell-官方文档摘录

    Customize the Prompt 自定义提示 You may modify the content of the prompt by setting the variable prompt i ...

  8. 我的Android进阶之旅------>Android关于dp(dip)、sp转px的工具类

    下面是一个工具类,提供了dp.sp.px之间相互转化的方法. import android.content.Context; /** * dp.sp 转换为 px 的工具类<br> * & ...

  9. time 和 datetime 模块

    在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(time.time( ...

  10. JavaScript你所不知道的困惑(3)

    版权声明:本文出自水寒的原创文章.未经博主同意不得转载. https://blog.csdn.net/lxq_xsyu/article/details/25600011 困惑一: window.col ...