在 Python 的 NumPy 库中,合并和分割数组是两种常用的操作,用于重组和分解数据集。将多个数据集合并为一个数据集,方便进行后续的处理。将数据集拆分为多个子数据集,用于并行处理或分布式处理。将数据集按指定条件进行分组,方便进行分析。

1、合并数组

合并数组是一种常见操作,允许你将多个数组组合成一个更大的数组。NumPy 提供了多种方法来合并数组,包括 concatenate、vstack、hstack、dstack 和 stack。

1)concatenate

可以将多个数组按指定轴连接起来。默认情况下,轴为 0,即将数组按行连接起来。如果轴为 1,则将数组按列连接起来。

import numpy as np

# 创建两个一维数组
array_1 = np.array([1, 2, 3])
array_2 = np.array([4, 5, 6])

# 使用 concatenate() 方法合并数组
array_3 = np.concatenate([array_1, array_2])

print(array_3)

2)vstack()

可以将多个数组按垂直方向(行方向)连接起来。用于垂直堆叠(按行)。

import numpy as np

# 创建两个二维数组
array_1 = np.array([[1, 2], [3, 4]])
array_2 = np.array([[5, 6], [7, 8]])

# 使用 vstack() 方法合并数组
array_3 = np.vstack([array_1, array_2])

print(array_3)

3)hstack()

可以将多个数组按水平方向(列方向)连接起来。 用于水平堆叠(按列)。

import numpy as np

# 创建两个二维数组
array_1 = np.array([[1, 2], [3, 4]])
array_2 = np.array([[5, 6], [7, 8]])

# 使用 hstack() 方法合并数组
array_3 = np.hstack([array_1, array_2])

print(array_3)

4)stack()

可以将多个数组按指定轴堆叠起来。默认情况下,轴为 0,即将数组按行堆叠起来。如果轴为 1,则将数组按列堆叠起来。在数据处理和科学计算中非常有用,特别是在需要组合来自不同来源但具有相同形状的数据时。它在图像处理、时间序列分析、以及机器学习的特征工程中也经常被使用。

import numpy as np

# 创建几个一维数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.array([7, 8, 9])

# 沿一个新轴堆叠这些数组
stacked_array = np.stack((a, b, c))

print(stacked_array)

2、分割数组

分割数组是一项常见的操作,它允许你将一个大数组分割成多个较小的子数组。NumPy 提供了几种不同的函数来实现数组的分割,包括 split、hsplit、vsplit 和 dsplit函数。

1)split()

可以将数组按照指定长度或指定轴进行分割。如果指定长度,则将数组分割为指定长度的子数组。如果指定轴,则将数组沿着指定轴分割为多个子数组。适用于各种数据处理场景,尤其是在需要对数据集进行分区处理时。

import numpy as np

# 创建一个二维数组
array = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 split() 方法分割数组
array1, array2 = np.split(array, 2)

print(array1)
print(array2)

2)vsplit

用于沿垂直轴(第一个轴)分割数组。它是 split 函数的特殊形式,专门用于处理至少二维的数组,并在垂直方向上进行分割。在数据预处理和机器学习任务中非常有用,尤其是在需要将大型数据集或图像分割成更小的部分以进行处理或分析时。

import numpy as np

# 创建一个二维数组
array = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 vsplit() 方法分割数组
array_1, array_2 = np.vsplit(array, 2)

# 输出结果
print(array_1)
print(array_2)

3)hsplit

用于沿水平轴分割数组的函数。它是 split 函数的特殊形式,专门用于沿数组的第二个轴(即水平轴)进行分割。处理数据时非常有用的工具,尤其是在需要将数据集分割为多个部分以进行不同处理时。

import numpy as np

# 创建一个二维数组
array = np.array([[1, 2, 3], [4, 5, 6],[7, 8, 9], [10, 11, 12]])

# 使用 vsplit() 方法分割数组
array_1, array_2 = np.vsplit(array, 2)

# 输出结果
print(array_1)
print(array_2)

4)dsplit

用于沿深度方向分割数组。它是 split 函数的特殊情况,专门用于处理至少三维的数组。当有一个三维数组(或更高维度),并希望沿着第三个轴(深度)分割它时,dsplit 是一个非常有用的函数。

import numpy as np

# 创建一个 3x4x6 的三维数组
arr = np.random.rand(3, 4, 6)
print(arr)
# 沿着深度方向分割数组为 3 个子数组
subarrays = np.dsplit(arr, 3)

print("子数组数量:", len(subarrays))
print("每个子数组的形状:", subarrays[0].shape)  # 输出: (3, 4, 2)

推荐文档