python numpy 矩阵堆叠

在实际操作中,遇到了矩阵堆叠的操作,本来想着自己写一个函数,后来想,应该有库函数,于是一阵找寻

import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
np.stack((a,b)) #默认行堆叠
输出:
array([[1, 2, 3],
       [4, 5, 6]])


np.vstack((a, b))
输出:
array([[1, 2, 3],
       [4, 5, 6]])
np.hstack((a, b))
输出:
array([1, 2, 3, 4, 5, 6])

简单解释一下上面的代码:其实主要是一个函数,stack(),这个函数其实包含了各种堆叠方式,我们上面的例子是针对二维矩阵的,其实我们大部分时候的操作都是针对二维矩阵的,为了方便,所以又定义了两个函数vstack()进行垂直的堆叠(vertically ),hstack()进行水平堆叠(horizontally)

函数stack()有个参数,axis,可以设置堆叠的维度,默认是0,其实和vstack()是一个效果,当设置成1的时候,结果如下

np.stack((a,b),axis=1)
输出:
array([[1, 4],
       [2, 5],
       [3, 6]])

从效果看,相当于按照原来a的第二维度,也就是列,一列一列的取出来,按行拼成了一个矩阵。

那么,hstack()的效果能不能利用stack()实现呢?我这里是没有探索出来,欢迎知道的童靴指教,不过hstack()的效果其实和concatenate是一样的

np.concatenate((a,b))
输出:
array([1, 2, 3, 4, 5, 6])

======================

#coding:utf-8


import numpy as np




## 数组的堆叠
a=[[1,2,3],[4,5,6],[7,8,9]]
b=[['e',2,5],[10,11,12],[14,15,16]]
print("a:",a)


#注意水平堆叠,输入的数组对应处需要相同的维度(列数相同)
c=np.hstack((a,b))
print("c:",c)


#concatente 也能达到同样的水平叠加的效果
d=np.concatenate((a,b),axis=1)
print(d)


#垂直叠加
a=[[1,2,4],[4,5,6],[7,8,9]]
b=[['e',2,5],[10,11,12],[14,15,16]]
e=np.vstack((a,b))
print("e:",e)


#concatente 也能达到垂直叠加的效果
f=np.concatenate((a,b),axis=0)
print("f:",f)




#列式堆叠 columns_stack(),对一维数据进行堆叠,类似hstack
one=np.arange(3)
two=np.arange(3)
ca=np.column_stack((one,two))
print("列式堆叠 ca:",ca)
#columns_stack() 也可以堆叠二维数组,与hstak() 相同
ca2=np.column_stack((a,b))
print("列式堆叠 ca2:",ca2)


#行时堆叠,row_stack() ,对一位数据进行行式堆叠,与vstack 类似
ca3=np.row_stack((np.arange(4),np.arange(4)))
print("行式堆叠 ca3:",ca3)

参考

https://blog.csdn.net/m0_37052320/article/details/79072402



你可能感兴趣的:(Python)