用 NumPy 巧妙操作数组:拼接、分割、重塑与改变形状
2024-01-08 09:17:15
掌握 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 技巧,你已踏上多维数组处理大师之路。拼接、分割、重塑和改变形状让你能够轻松操纵数据,挖掘其蕴藏的价值。
常见问题解答:
-
什么时候使用
np.concatenate()
而非np.vstack()
或np.hstack()
?
np.concatenate()
提供了更多的灵活性,因为它可以沿任何轴拼接数组,而np.vstack()
和np.hstack()
分别只能沿第 0 轴(垂直)和第 1 轴(水平)拼接。 -
如何沿特定轴分割数组?
使用np.split()
函数并指定axis
参数,例如:np.split(arr, 3, axis=1)
。 -
重塑数组和改变形状有什么区别?
重塑改变数组的形状,而改变形状可以改变数组的维度。 -
如何将一维数组转换为多维数组?
使用np.reshape()
函数,例如:np.reshape(arr, (2, 3))
将一维数组arr
转换为形状为 (2, 3) 的二维数组。 -
如何将多维数组展平为一维数组?
使用np.ravel()
或np.flatten()
函数,例如:np.ravel(arr)
将多维数组arr
展平为一维数组。