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]]

"""
posted @ 2025-03-12 16:35  BigSun丶  阅读(100)  评论(0)    收藏  举报