写在前面:
hstack()函数是用于两数组的水平方向合并,合并后行数不变;而vstack()函数,是用于两数组的垂直方向的合并,合并后列数不变,即horizontal和vertical

最近博主在项目中遇到了一个棘手的问题,就是在利用sklearn中的MLP模型的MLPRegressor时

model = MLPRegressor(random_state=30,learning_rate_init=0.001,max_iter=2000)  # 神经网络回归模型
modelfit = model.fit(trainX,trainY)`  # 训练模型

model.fit(trainX,trainY)中传入的trainX要求是一个n行两列的数组,但是项目源文件的格式是如下所示:

X1	X2	Y
1	0	14
2	36	12.69267
3	72	14.84871
4	108	15.57425
5	144	14.20613
6	180	12.83801
7	216	12.939175
8	252	13.99345
9	288	14.66057
10	324	14.8066475
11	360	14.769968
12	396	14.64191
13	432	14.91671
14	468	15.92667429
15	504	15.683245
16	540	15.865715
17	576	15.972055
18	612	16.121768
19	648	17.963816
20	684	18.5594075
21	720	17.679506
22	756	16.742342
23	792	16.113535
24	828	15.793085
25	864	14.889538
26	900	13.402894
27	936	12.3704575
28	972	11.4288625
29	1008	11.7414425
30	1044	11.541173
31	1080	10.577219
32	1116	9.7564725
33	1152	9.692945
34	1188	10.357995
35	1224	10.60211
36	1260	10.42529
37	1296	9.8458
38	1332	9.114232
39	1368	8.024944
40	1404	7.0691425
41	1440	6.426746667
42	1476	6.344356667
43	1512	4.729607273
44	1548	3.942810909
45	1584	3.156014545
46	1620	2.369218182
47	1656	1.55165375
48	1692	1.197923333
49	1728	3.27996
50	1764	5.17578
51	1800	7.0716
52	1836	9.99492
53	1872	13.94574
54	1908	13.399995

其中,trainX即为X1和X2的组合,在这里就遇到麻烦了,在网上找了很多方法,最后终于找到了一种可行的方法:

path = input('请输入沉降数据地址:') # E:\\百度网盘下载内容\\nonlinear theory\\MLP.xlsx
exceldata0= pd.read_excel(path,sheet_name='Sheet1',usecols='A:C')
X1 = np.array(exceldata0['X1'])
X2 = np.array(exceldata0['X2'])#将原始数据转换为数组

如上代码所示,要先将原始数据转换为数组,再进行接下来的操作

trainX1 = X1[:27,np.newaxis]
trainX2 = X2[:27,np.newaxis] #取前27行数据,并转换成27行一列数据,便于矩阵合并
trainX = np.hstack((trainX1,trainX2))

如上代码所示,正常若要取X1的前27行数据的话,就是使用X1[:27]即可,但是若要完成后面的拼接就要将其转换为二维的数组(现在是一维的),可看下面例子:

X1 = np.array(exceldata0['X1'])
X2 = np.array(exceldata0['X2'])
# Y = np.array(exceldata0['Y'])
trainX1 = X1[:27]
trainX2 = X2[:27,np.newaxis] #转换成27行一列数据,便于矩阵合并
print(np.shape(trainX1))
print(np.shape(trainX2))

输出结果:
(27,)
(27, 1)

由上可以看到,加了np.newaxis的trainX2已经是二维的了。【(27,)表示一维,(27, 1)表示二维】

最后再调用np.hstack()函数就可以合并啦:

trainX1 = X1[:27,np.newaxis]
trainX2 = X2[:27,np.newaxis] #转换成27行一列数据,便于矩阵合并
trainX = np.hstack((trainX1,trainX2))
print(trainX)

输出结果:
[[  1   0]
 [  2  36]
 [  3  72]
 [  4 108]
 [  5 144]
 [  6 180]
 [  7 216]
 [  8 252]
 [  9 288]
 [ 10 324]
 [ 11 360]
 [ 12 396]
 [ 13 432]
 [ 14 468]
 [ 15 504]
 [ 16 540]
 [ 17 576]
 [ 18 612]
 [ 19 648]
 [ 20 684]
 [ 21 720]
 [ 22 756]
 [ 23 792]
 [ 24 828]
 [ 25 864]
 [ 26 900]
 [ 27 936]]

综上就实现了两个数组的合并啦!原创不易,码字辛苦,多谢小伙伴们的观看和支持!让我们共同进步,一起成长!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐