NumPy ndarray合并数组

在 NumPy 中,合并数组也是最常见的操作之一,下表列举了常见的用于数组或向量合并的方法。

表1:Num:Py ndarray 数组合并方法
函数 描述
np. append() 内存占用大
np.concatenate() 没有内存问题
np. stack() 沿着新的轴加入一系列数组
np.hstack() 堆栈数组垂直顺序(行)
np.vstack() 堆栈数组垂直顺序(列)
np.dstack() 堆栈数组按顺序深入(沿第3维)
np.vsplit() 将数组分解成垂直的多个子数组的列表

几点说明:

  • append()、concatenate() 以及 stack() 都有一个 axis 参数,用于控制数组的合并方式是按行还是按列。
  • 对于 append() 和 concatenate(),待合并的数组必须有相同的行数或列数(满足一个即可)。
  • stack()、hstack()、dstack() 要求待合并的数组必须具有相同的形状(shape)。

下面选择一些常用函数进行说明。

append()

append() 函数可以合并一维数组:

import numpy as np

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

append() 也可以合并多维数组:

import numpy as np

a =np.arange(4).reshape(2, 2)
b = np.arange(4).reshape(2, 2)
# 按行合并
c = np.append(a, b, axis=0)
print('按行合并后的结果')
print(c)
print('合并后数据维度', c.shape)
# 按列合并
d = np.append(a, b, axis=1)
print('按列合并后的结果')
print(d)
print('合并后数据维度', d.shape)

输出结果:

按行合并后的结果
[[0 1]
  [2 3]
  [0 1]
  [2 3]]
合并后数据维度 (4, 2)
按列合并后的结果
[[0 1 0 1]
  [2 3 2 3]]
合并后数据维度 (2, 4)

concatenate()

沿指定轴连接数组或矩阵:

import numpy as np
a =np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])

c = np.concatenate((a, b), axis=0)
print(c)
d = np.concatenate((a, b.T), axis=1)
print(d)

输出结果:

[[1 2]
  [3 4]
  [5 6]]
[[1 2 5]
  [3 4 6]]

stack()

沿指定轴堆叠数组或矩阵:

import numpy as np

a =np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.stack((a, b), axis=0))

输出结果:

[[[1 2]
  [3 4]]

[[5 6]
  [7 8]]]

匿名

发表评论

匿名网友