一、hstack简介
hstack是NumPy中常用的一个函数,全称是horizontal stack,它主要用于将多个数组按照水平方向(列方向)进行拼接,生成一个新的数组。
使用hstack之前需要保证所有要拼接的数组的行数必须一致,列数可以不同。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([[10, 11, 12], [13, 14, 15], [16, 17, 18]])
c = np.hstack((a, b))
print(c)
运行结果:
[[ 1 2 3 10 11 12]
[ 4 5 6 13 14 15]
[ 7 8 9 16 17 18]]
二、hstack的使用场景
hstack主要应用于数据预处理,比如当我们需要将多个数据源的数据按照列进行拼接的时候,就可以使用hstack。
另外,当我们需要对多个列的数据进行某些操作时,也会使用到hstack。
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
z = np.array([7, 8, 9])
c = np.hstack((x.reshape(-1, 1), y.reshape(-1, 1), z.reshape(-1, 1)))
print(c)
运行结果:
[[1 4 7]
[2 5 8]
[3 6 9]]
上面的代码中将三个数组按照列进行拼接,组成了一个新的二维数组。
三、hstack与vstack的区别
hstack与vstack的功能类似,不同的是hstack是将多个数组按照列进行拼接,而vstack是将多个数组按照行进行拼接。
因此,使用hstack时所有要拼接的数组的行数必须一致,而使用vstack时所有要拼接的数组的列数必须一致。
另外,可以使用concatenate函数来实现hstack和vstack的功能,它的第二个参数表示拼接的方向,0表示按照行方向(即vstack),1表示按照列方向(即hstack)。
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([[10, 11, 12], [13, 14, 15], [16, 17, 18]])
c1 = np.concatenate((a, b), axis=0) # 等价于vstack
c2 = np.concatenate((a, b), axis=1) # 等价于hstack
print(c1)
print(c2)
运行结果:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]
[16 17 18]]
[[ 1 2 3 10 11 12]
[ 4 5 6 13 14 15]
[ 7 8 9 16 17 18]]
四、hstack函数的注意事项
在使用hstack之前需要注意以下事项:
1、所有要拼接的数组的行数必须一致。
2、数组中的元素类型必须一致,否则会出现类型转换错误。
3、如果数组中有缺失值,拼接后的数组中也会带有缺失值。
4、尽量避免在Python的使用中使用多个维度组成的列表或者元组,这会影响性能。
五、总结
hstack是一个十分常用的NumPy函数,能够将多个数组按照列方向进行拼接,生成一个新的数组。使用hstack需要注意一些事项,例如所有要拼接的数组的行数必须一致,数组中的元素类型必须一致,如果有缺失值,拼接后的数组中也会带有缺失值等。
另外,hstack与vstack是两个常用的拼接函数,除此之外,还有concatenate函数,能够实现hstack和vstack的功能,需要特别注意其第二个参数表示拼接的方向。