返回

用 NumPy 巧妙操作数组:拼接、分割、重塑与改变形状

见解分享

掌握 NumPy 的多维数组操纵技巧:拼接、分割、重塑和改变形状

摘要:

NumPy,作为数据处理的利器,在操纵多维数组方面展现出强大实力。本文将深入探索 NumPy 的数组拼接、分割、重塑和改变形状技巧,助你解锁多维数组的处理奥秘。

拼接数组:打造多维数据拼图

拼接是将多个数组连接为一体的过程。NumPy 提供了 np.concatenate() 函数,沿指定轴将数组无缝衔接。试想一下,它就像将两块拼图连接起来,形成一幅更完整的图景。

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result = np.concatenate((arr1, arr2))  # 沿第 0 轴拼接

print(result)  # 输出:[1 2 3 4 5 6]

通过指定 axis 参数,你可以控制拼接的方向,就像调整拼图块的排列方式,创建不同的图案。

分割数组:拆解多维数据

分割则相反,它将一个数组拆分为更小的部分。NumPy 提供了 np.split()np.array_split() 函数,让你灵活地分割数组。

np.split() 根据指定数量将数组拆分,就像切蛋糕一样,而 np.array_split() 则根据指定的大小进行分割,就像切披萨一样。

arr = np.array([1, 2, 3, 4, 5, 6])

# 沿第 0 轴拆分为 3 个子数组
result1 = np.split(arr, 3)

# 沿第 0 轴拆分为大小分别为 2 和 4 的子数组
result2 = np.array_split(arr, [2, 4])

print(result1)  # 输出:[array([1, 2]), array([3, 4]), array([5, 6])]
print(result2)  # 输出:[array([1, 2]), array([3, 4]), array([5, 6])]

重塑数组:改变数组外观

重塑就像给数组换装,它改变了数组的形状,但保留了内部元素。NumPy 的 np.reshape() 函数让你轻松实现这一目标。

arr = np.array([[1, 2], [3, 4]])

# 重塑为一行 4 列的数组
result = np.reshape(arr, (1, 4))

print(result)  # 输出:[[1 2 3 4]]

就像把一张矩形图片变成宽屏图片一样,重塑可以改变数组的外观,优化数据的组织和可视化。

改变数组形状:超越重塑

改变形状更进一步,它允许你更改数组的维度。NumPy 的 np.ravel()np.flatten() 函数派上用场。

np.ravel() 将数组展平为一维数组,就像把多层的千层面压成薄薄的一层,而 np.flatten() 则将数组展平为行主序的一维数组,就像把一本书摊平,露出每一行。

arr = np.array([[1, 2], [3, 4]])

# 展平为一维数组
result1 = np.ravel(arr)

# 展平为行主序的一维数组
result2 = np.flatten(arr)

print(result1)  # 输出:[1 2 3 4]
print(result2)  # 输出:[1 2 3 4]

通过改变形状,你可以灵活地调整数据的维度,适应不同的分析和处理需求。

结论:多维数组处理大师之路

掌握了这些 NumPy 技巧,你已踏上多维数组处理大师之路。拼接、分割、重塑和改变形状让你能够轻松操纵数据,挖掘其蕴藏的价值。

常见问题解答:

  1. 什么时候使用 np.concatenate() 而非 np.vstack()np.hstack()
    np.concatenate() 提供了更多的灵活性,因为它可以沿任何轴拼接数组,而 np.vstack()np.hstack() 分别只能沿第 0 轴(垂直)和第 1 轴(水平)拼接。

  2. 如何沿特定轴分割数组?
    使用 np.split() 函数并指定 axis 参数,例如:np.split(arr, 3, axis=1)

  3. 重塑数组和改变形状有什么区别?
    重塑改变数组的形状,而改变形状可以改变数组的维度。

  4. 如何将一维数组转换为多维数组?
    使用 np.reshape() 函数,例如:np.reshape(arr, (2, 3)) 将一维数组 arr 转换为形状为 (2, 3) 的二维数组。

  5. 如何将多维数组展平为一维数组?
    使用 np.ravel()np.flatten() 函数,例如:np.ravel(arr) 将多维数组 arr 展平为一维数组。