NumPy - 展平数组
展平 NumPy 数组
NumPy 中的展平数组是指将多维数组转换为一维数组的过程,其中所有元素都按顺序排列。这意味着,无论数组的维度如何(无论是二维、三维还是更高维),展平都会将其缩减为一个包含元素的向量。
NumPy 提供了两个函数:ndarray.flatten() 和 ndarray.ravel(),这两个函数都用于展平数组。
使用 flatten() 函数展平数组
NumPy 中的 flatten() 函数用于将多维数组转换为一维数组,这也称为展平。
它返回一个新数组,其中包含原始数组的所有元素,并按行优先顺序(C 风格)排列。语法如下:
arr.flatten(order='C')
其中,order 是可选参数,用于指定元素的顺序。默认为"C",表示行优先排序。
示例
在下面的示例中,我们使用 NumPy 中的 flatten() 函数将数组"arr"按单行优先排序展平 -
import numpy as np # 数组 arr = np.array([[1, 2, 3], [4, 5, 6]]) # 展平数组 flattened_arr = arr.flatten() print("原始数组:") print(arr) print(" 展平后的数组:", flattened_arr)
以下是获得的输出 -
原始数组: [[1 2 3] [4 5 6]] 扁平化数组:[1 2 3 4 5 6]
使用 ravel() 函数扁平化数组
NumPy 中的 ravel() 函数用于将多维数组创建扁平化的一维数组。与 flatten() 函数不同,ravel() 函数会返回原始数组的扁平化视图,而不会尽可能地进行复制。语法如下:-
arr.ravel(order='C')
示例
在下面的示例中,我们使用 ravel() 函数将二维数组展平为一维数组:-
import numpy as np # 数组 arr = np.array([[1, 2, 3], [4, 5, 6]]) # 展平数组 raveled_arr = arr.ravel() print("原始数组:") print(arr) print(" 展平后数组:", raveled_arr)
以下是上述代码的输出 -
原始数组: [[1 2 3] [4 5 6]] 展平后数组:[1 2 3 4 5 6]
按 Fortran 顺序展平数组
按 Fortran 顺序展平多维数组时,会将其转换为一维数组,其中元素的排列方式与逐列读取数组的方式相同。
例如,假设你有一个二维数组 A,其维度为行、列,按 Fortran 顺序展平数组会按如下方式排列元素:迭代第一列的所有元素,然后移至第二列,依此类推。
在 NumPy 中,你可以通过在 flatten() 函数中将 order 参数设置为 F 来按 Fortran 顺序展平数组。
示例
在此示例中,我们使用 NumPy 中的 array.flatten() 函数按 Fortran 顺序展平数组"arr" -
import numpy as np # array arr = np.array([[1, 2, 3], [4, 5, 6]]) # 按 Fortran 顺序展平 flattened_arr_fortran = arr.flatten(order='F') print("原始数组:") print(arr) print(" 展平后的数组(Fortran 顺序):",flattened_arr_fortran)
执行上述代码后,我们得到以下输出 -
原始数组: [[1 2 3] [4 5 6]] 展平后的数组(Fortran 顺序):[1 4 2 5 3 6]
连接展平后的数组
在 NumPy 中,可以使用 numpy.concatenate() 函数连接展平后的数组。以下是分步操作方法 -
展平数组 - 首先,您需要使用 flatten() 函数展平每个要连接的数组。这会将每个多维数组转换为一维数组。
连接 - 然后,使用 numpy.concatenate() 函数将展平的数组连接成一个数组。
连接是将多个数组合并为一个更大数组的过程。连接扁平化数组时,主要就是将每个扁平化数组的元素逐个附加,以创建一个更长的数组。
示例
在下面的示例中,我们首先使用 array.flatten() 函数将二维数组"arr1"和"arr2"扁平化。然后,我们使用 NumPy 中的 concatenate() 函数连接这两个扁平化数组 -
import numpy as np # arrays arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) # 展平数组 flat_arr1 = arr1.flatten() flat_arr2 = arr2.flatten() # 连接展平数组 concatenated_arr = np.concatenate((flat_arr1, flat_arr2)) print("展平数组 1:") print(flat_arr1) print(" 展平数组 2:") print(flat_arr2) print(" 连接后的展平数组:",concatenated_arr)
输出结果如下 -
展平数组 1: [1 2 3 4] 展平数组 2: [5 6 7 8] 连接后的展平数组:[1 2 3 4 5 6 7 8]
用零初始化扁平化数组
用零初始化扁平化数组是一种创建一维数组的方法,其中所有元素都设置为零。
NumPy 提供了一个函数 numpy.zeros_like(),用于创建一个与给定数组具有相同形状和类型的零数组。语法如下:
numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)
其中:
a − 表示输入数组。
dtype(可选)− 指定输出数组的数据类型。如果未提供,则使用 a 的数据类型。
order(可选)- 指定结果的内存布局顺序('C' 表示行优先,'F' 表示列优先,'A' 表示任意,'K' 表示保留,'C' 为默认值)。
subok(可选)- 如果为 True,则将传递子类,否则,返回的数组将被强制为基类数组(默认值)。
shape(可选)- 指定输出数组的形状。如果未提供,则默认为 a.shape。
示例
在此示例中,我们创建一个用特定值初始化的二维 NumPy 数组"arr"。然后我们将"arr"展平为一维数组,并用零初始化"flattened_zeros"-
import numpy as np # 初始化二维数组 arr = np.array([[1, 2], [3, 4]]) # 平铺并用零初始化 flattened_zeros = np.zeros_like(arr.flatten()) print("原始数组:") print(arr) print(" 平铺后带零的数组:",flattened_zeros)
结果如下 -
原始数组: [[1 2] [3 4]] 平铺后带零的数组:[0 0 0 0]
在平铺数组中查找最大值
在平铺数组中查找最大值意味着确定多维数组的一维表示中的最大元素数组。
在 NumPy 中,可以使用 numpy.max() 函数查找数组中的最大值。当应用于扁平化数组时,此函数将返回该数组中存在的最大值。语法如下:
numpy.max(a, axis=None, out=None, keepdims=False, initial=None, where=True)
其中,
a − 是要计算其最大值的输入数组。
axis(可选)− 指定要沿其进行操作的轴。默认情况下,返回"None"作为扁平化数组的最大值。
out(可选)- 用于存储结果的输出数组。如果提供,则必须具有与预期输出相同的形状和缓冲区长度。
示例
在下面的示例中,我们使用 numpy.max() 函数查找扁平化数组中的最大值 -
import numpy as np # array arr = np.array([[1, 2], [3, 4]]) # 平铺数组 flattened_arr = arr.flatten() # 查找最大值 max_value = np.max(flattened_arr) print("原始数组:") print(arr) print(" 平铺数组:") print(flattened_arr) print(" 平铺数组中的最大值:",max_value)
我们得到如下所示的输出 -
原始数组: [[1 2] [3 4]] 平铺数组: [1 2 3 4] 平铺数组中的最大值:4