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