10 合并数组

0 阅读2分钟

数组能分割,同样能把数组进行合并

合并数组的方法

NumPy 有下列几种合并数组元素的方法:

方法参数说明
numpy.concatenate()arrays将多个【同形状】的数组,依次链接为新数组
numpy.stack()arrays将多个【同形状】的数组,依次合并为新数组
numpy.hstack()、numpy.vstack()arrays将多个「同形状」的数组,「水平」或「垂直」合并为新的数组。

numpy.concatenate()

numpy.concatenate() 会将多个「同样形狀」的数组,依序连接为新的数组,如果数组形狀不同,合并会发生错误。下方將 a、b、c 三个数组,依序连接为新数组 ( 同样都是一维数组 )

import numpy as np

a = np.array([1])
b = np.array([2,2])
c = np.array([3,3,3])
d = np.concatenate((a, b, c))
print(d)   # [1 2 2 3 3 3]

下方的代码会将 a 和 b 两个分別是 3x2 和 2x2 的数组,连接成一个新的 5x2 数组

import numpy as np

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

numpy.concatenate() 还可以设置参数 axis,0 表示 row 轴 (默认值 ),1 为 column 轴,如果数组形狀不同,合并会发生错误

import numpy as np

a = np.array([[1,1],[2,2],[3,3]])      # 3x2 数组
b = np.array([[4,4],[5,5],[6,6]])      # 3x2 数组
# b = np.array([[4,4],[5,5],[6,6,6]])  # 如果 b 的形狀和 a 不同,会发生错误
c = np.concatenate((a, b), axis=0)     # axis 设置为 0
print(c)                               # 连接成 6x2 数组
'''
[[1 1]
 [2 2]
 [3 3]
 [4 4]
 [5 5]
 [6 6]]
'''
d = np.concatenate((a, b), axis=1)     # axis 设置为 1
print(d)                               # 连接成 3x4 数组
'''
[[1 1 4 4]
 [2 2 5 5]
 [3 3 6 6]]
'''

numpy.stack()

numpy.stack() 会将多个「同样形状」的数组,依序堆积为新的数组,如果数组形狀不同,合并会发生错误。下方的程式会将 a、b、c 三个形狀相同的 1x2 数组,依序合并为一个 1x6 的新数组。

import numpy as np

a = np.array([1,1])
b = np.array([2,2])
c = np.array([3,3])
d = np.concatenate((a, b, c))
print(d)   # [1 1 2 2 3 3]

numpy.stack() 还可以设定参数 axis,0 表示 row 轴 ( 默认值 ),1 为 column 轴,如果数组形狀不同,合并会发生错误

import numpy as np

a = np.array([[1,1],[2,2],[3,3]])  # 3x2 的数组
b = np.array([[4,4],[5,5],[6,6]])  # 3x2 的陣列
c = np.stack((a, b), axis=0)       # axis 设定为 0
print(c)                           # 堆积成为 2x3x2 的数组
'''
[[[1 1]
  [2 2]
  [3 3]]
 [[4 4]
  [5 5]
  [6 6]]]
'''
d = np.stack((a, b), axis=1)       # axis 设定为 1
print(d)                           # 堆积成为 3x2x2 的数组
'''
[[[1 1]
  [4 4]]
 [[2 2]
  [5 5]]
 [[3 3]
  [6 6]]]
'''

numpy.hstack()、numpy.vstack()

numpy.hstack()、numpy.vstack() 会将多个「同形状」的数组,「水平」或「垂直」合并为新数组

a = np.array([[1,1],[2,2],[3,3]])   # 3x2 数组
b = np.array([[4,4],[5,5],[6,6]])   # 3x2 数组
c = np.hstack((a, b))               # 水平合并
print(c)                            # 变成 3x4 的数组
'''
[[1 1 4 4]
 [2 2 5 5]
 [3 3 6 6]]
'''
d = np.vstack((a, b))               # 垂直合并
print(d)                            # 变成 6x2 的数组
'''
[[1 1]
 [2 2]
 [3 3]
 [4 4]
 [5 5]
 [6 6]]
'''