numpy数组的合并、分割和行列交换
numpy数组的合并、分割和行列交换
一、numpy数组的拼接
-
有两种拼接方法
numpy.vstack(元组) 和 numpy.hstack(元组)-
numpy.vstack(),竖直拼接,将传入的数组按照从上往下依次的堆叠,相当于,向下append -
numpy.hstack(),水平拼接,将传入的数组按照从左往右依次平铺,相当于,向右append
-
c = np.arange(12).reshape(2,6)
d = np.random.randint(20,32,12).reshape(2,6)
print(c)
print(d)
e = np.vstack((c,d)) # 竖直拼接
print(e)
f = np.hstack((c,d)) # 水平拼接
print(f)
"""
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
[[31 21 20 23 28 30]
[28 22 30 26 23 20]]
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[31 21 20 23 28 30]
[28 22 30 26 23 20]]
[[ 0 1 2 3 4 5 31 21 20 23 28 30]
[ 6 7 8 9 10 11 28 22 30 26 23 20]]
"""
二、numpy数组的分割
- 一般将数组分割成几部分,我们常用索引切片即可完成,便捷易懂
- 但numpy中也有内置的专门分割数组方法,即
numpy.vsplit() numpy.hsplit()numpy.vsplit(),竖直分割,同上面竖直拼接的效果类似,将数组以行分割成几部分numpy.hsplit(),水平分割,同上面水平拼接的效果类似,将数组以列分割成几部分
三、数组的行列交换
- 为了防止数组在拼接后驴头不对马嘴,有时常常需要提前将数组中的 行与行 或 列与列 进行交换
- python中有不使用第三个变量完成两个变量值的互换的花式赋值的方式,numpy中也可以实现相同的操作
s = np.arange(24).reshape(4,6)
print(s)
s[[0,1],:] = s[[1,0],:] # 将数组的第1行与第2行进行交换
print('交换行')
print(s)
s[:,[1,3]] = s[:,[3,1]] # 将数组的第2列与第4列进行交换
print('交换列')
print(s)
"""
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
交换行
[[ 6 7 8 9 10 11]
[ 0 1 2 3 4 5]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
交换列
[[ 6 9 8 7 10 11]
[ 0 3 2 1 4 5]
[12 15 14 13 16 17]
[18 21 20 19 22 23]]
"""
四、小示例
- 现在本地有两份不同国家的数据,我们想将数据拿出来放在以前研究,同时还保留每份数据所属的国家,如何实现
us_file_path = "./US_video_data_numbers.csv"
uk_file_path = "./GB_video_data_numbers.csv"
us_data = np.loadtxt(us_file_path, dtype="int", delimiter=",")
uk_data = np.loadtxt(uk_file_path, dtype="int", delimiter=",")
# 可以在最左边添加一列, 为0代表美国, 为1代表英国
zeros_data = np.zeros((us_data.shape[0], 1)).astype("int")
ones_data = np.ones((uk_data.shape[0], 1)).astype("int")
us_data = np.hstack((zeros_data, us_data))
uk_data = np.hstack((ones_data, uk_data))
# 拼接两组数据
final_data = np.vstack((us_data, uk_data))
print(final_data)
"""
[[ 0 4394029 320053 5931 46245]
[ 0 7860119 185853 26679 0]
[ 0 5845909 576597 39774 170708]
...
[ 1 109222 4840 35 212]
[ 1 626223 22962 532 1559]
[ 1 99228 1699 23 135]]
"""

浙公网安备 33010602011771号