numpy函数hstack,vstack,dstack把几个小数组合并成一个大数组

vstack、hstack和dstack都用于把几个小数组合并成一个大数组。它们的差别是小数组的元素在大数组中的排列顺序有所不同

一、vstack

vstack实现了轴0合并。vstack的字母v表示vertical的意思,相当是追加的意思

numpy.vstack(tup)

tup:两个数组,除第一轴外,所有阵列的形状都必须相同。一维数组必须具有相同的长度

shape(N,)的1维数组已重塑为(1,N)后沿第一轴进行连接

#这个是(2,),会变成(1,2),因此下面这两种结果是一样的
import numpy as np
a = [1,2]
b = [3,4]
c = np.vstack((a,b))
print(c)

#这个是(1,2)
a = [[1,2]]
b = [[3,4]]
c = np.vstack((a,b))
print(c)
'''
[[1 2]
 [3 4]]
[[1 2]
 [3 4]]
'''

总结:有两列数据,然后再转置

pd.DataFrame(c)

二、hstack

  hstack表示轴1合并

a = [[1,2],
     [3,4]]
b = [[5],
     [6]]
print(np.hstack([a,b]))
# [[1 2 5]
#  [3 4 6]]

相当右边追加

三、dstack

看看之前使用到的

newvalues=np.dstack((np.repeat(t.reportno.values,list(map(len,t.data_list.values))),np.concatenate(t.data_list.values)))
pd.DataFrame(data=newvalues[0],columns=['reportno','data_list'])

沿深度方向(沿第三轴)按顺序堆叠数组

numpy.dstack(tup)

参数:

tup:sequence of arrays,两个数组,除第三个轴外,所有阵列的形状都必须相同。一维或二维阵列必须具有相同的形状。

值得注意的是:

shape(M,N)的2维数组已重塑为(M,N,1),shape(N,)的1维数组 已重塑为(1, N,1),再按照第三维相加

现在,a、b在2号轴上被连接起来。如果a、b是一维数组,或是二维数组,系统首先将a、b变为三维数组,再按照2号轴进行合并操作,把a追加到c中,再把b的元素排到c中。在结果中,来自于b的元素的2号轴的下标将变大,因此排到a的后面,但各元素其它轴的坐标不变。

a = np.array((1,2,3))
b = np.array((2,3,4))
np.dstack((a,b))
'''
np.dstack((a,b))[0] 和上面的结果也是一样的
array([[[1, 2], [2, 3], [3, 4]]]) ''' np.dstack((a,b)).shape #(1, 3, 2) 沿第三轴相加,因此是1,3,2 a.shape #(3,) b.shape #(3,)

再看二维的

a = np.array([[1,2],
              [3,4]])
b = np.array([[5,6],
              [7,8]])
c = np.dstack([a,b])
print(c)
'''
[[[1 5]
  [2 6]]
 [[3 7]
  [4 8]]]
'''

print(c[:,:,0])
'''
[[1 2]
 [3 4]] 
'''

print(c[:,:,1])
'''
[[5 6]
 [7 8]]
'''

print(c[0])
print(c[1])
'''
[[1 5]
 [2 6]]
 
[[3 7]
 [4 8]]
'''

看来这么多内在的东西,我们总结一下:

参数是一维时,其实就是就是两列数据,我们需要弄成df中的两列,二维时不清楚,反正就是对位merge

原文地址:https://www.cnblogs.com/cgmcoding/p/14189314.html