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

原文地址:https://www.cnblogs.com/cymwill/p/8358866.html

时间: 2024-10-05 08:21:47

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 accomplish this? Answer Matlab cell arrays are most similar to Python lists, since they can hold any object - but scipy.io.loadmat imports them as numpy objec

numpy数组转置与轴变换

numpy数组转置与轴变换 矩阵的转置 >>> import numpy as np >>> arr=np.arange(15).reshape((3,5)) >>> arr array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) >>> arr.T array([[ 0, 5, 10], [ 1, 6, 11], [ 2, 7, 12], [ 3, 8, 1

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

JavaArray合并数组 目录(?)[+] 一apache-commons 二Systemarraycopy 三ArrayscopyOf 四ArraynewInstance http://freewind.me/blog/20110922/350.html 在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁,却还是值得思考的.这里介绍四种方法,请参考选用. 一.apache-commons 这是最简单的办法.在apache-commo

怎么把两个数组合并成一个php

一个数组是$new[] 另一个是$fuids[] 都是一维数组 我想实现的是合并后的数组还是一维数组 比如说$new[]内容是1,2,3而$fuids[]的内容是4,5,6合并后的数组内容是1,2,3,4,5,6请问应该怎么合并 <? $a = array(1,3,4); $b = array('aa','bb','cc'); $c = array(); foreach($a as $key){ foreach ($b as $val){ $c[$key]= $val; } } var_dump

python中将两个list合并为字典

两个list合并为字典的代码如下: def Run(): list2 = [1, 2, 3, 4, 5 ]; list3 = ["a", "b", "c", "d","e"]; dict={}; i=0; length=len(list2); while i<length: 'dict[list2[i]]=list3[i];这种方法也可以' dit={list2[i]:list3[i]}; dict.

linux 两个文件合并

可以使用cat命令,有两种实现的方式,一种将两个文件合并的到一个新的文件,另一种将一个文件追加到另一个文件的末尾. 方法一:使用cat命令从文件中读入两个文件,然后将重定向到一个新的文件.这种方法可以一次性合并任意多个文件.用法示例:将file1.txt和file2.txt合并到file.txt$ cat file1.txt file2.txt > file.txt 方法二:只使用cat命令读入一个文件,然后使用>>将文本流追加到另一个文件的末位.用法示例:将file1.txt追加到fi

【转载】Python中如何高效实现两个字典合并,三种方法比较。

本文转载自:http://www.pythoner.com/13.html Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: 方法一: dictMerged1 = dict( dict1.items() + dict2.items() ) 然而,该方法合并时所用时间较长,效率更高的代码为: 方法二: dictMerged2 = dict( dict1,

OpenCV两张图片的合并

转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 OpenCV两张图片的合并 原理: 两张图片合并,想想图片是用一个个像素点来存储,每个像素点有他的值.那么合并,无非就是像素点值得合并,使用的公式可以就是给两张图片分别一个权值,然后求和.向下面这个公式: 的值位于0至1之间 OpenCV实现: 那么我们在openCV内怎么实现呢?在openCV中,有一个addWeighted函数,函数具体调用可以看这里. 读取完两个要合并的图片后,(注意,这里合并的图片必

Clojure:将两个list合并成一个map

假设我们有两个list,分别是: (def a [“one” “two” “three”]) (def b [1 2 3]) 我们要把它们合为一个键值对应的map,做法很简单: 1. 先将a和b合为一个一一对应的list: (map vector a b) => (["one" 1] ["two" 2] ["three" 3]) 2. 然后再将list转化成为map: (into {} (map vector a b)) => {&q