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

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

# Flattening the array
flattened_arr = arr.flatten()

print("Original Array:")
print(arr)
print("\nFlattened Array:", flattened_arr)

获得的输出如下:

Original Array:
[[1 2 3]
 [4 5 6]]

Flattened Array: [1 2 3 4 5 6]

使用 ravel() 函数扁平化数组

NumPy 中的 ravel() 函数用于从多维数组创建一个扁平化的 1D 数组。与 flatten() 函数不同,ravel() 函数在可能的情况下返回原始数组的扁平化视图,而不会创建副本。以下是语法:

arr.ravel(order='C')

示例

在下面的示例中,我们使用 ravel() 函数将一个 2D 数组扁平化为一个 1D 数组:

import numpy as np

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

# Flattening the array
raveled_arr = arr.ravel()

print("Original Array:")
print(arr)
print("\nRaveled Array:", raveled_arr)

上述代码的输出如下:

Original Array:
[[1 2 3]
 [4 5 6]]

Raveled Array:[1 2 3 4 5 6]

Fortran 顺序扁平化数组

当您以 Fortran 顺序扁平化多维数组时,您将其转换为一维数组,其中元素排列方式就像您逐列读取数组一样。

例如,如果您有一个维度为 (行, 列) 的 2D 数组 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]])

# Flatten in Fortran order
flattened_arr_fortran = arr.flatten(order='F')

print("Original Array:")
print(arr)
print("\nFlattened Array (Fortran order):",flattened_arr_fortran)

执行上述代码后,我们将得到以下输出:

Original Array:
[[1 2 3]
 [4 5 6]]

Flattened Array (Fortran order):[1 4 2 5 3 6]

连接扁平化数组

在 NumPy 中,您可以使用 numpy.concatenate() 函数连接扁平化数组。以下是逐步操作方法:

  • 扁平化数组 - 首先,您需要使用 flatten() 函数扁平化要连接的每个数组。这会将每个多维数组转换为一维数组。

  • 连接 - 然后,使用 numpy.concatenate() 函数将扁平化的数组连接成一个数组。

连接是将多个数组组合成一个更大数组的过程。当您连接扁平化数组时,您主要是在一个接一个地追加每个扁平化数组的元素,以创建一个更长的单个数组。

示例

在下面的示例中,我们首先使用 array.flatten() 函数扁平化 2D 数组“arr1”和“arr2”。然后,我们使用 NumPy 中的 concatenate() 函数连接这些扁平化数组:

import numpy as np

# arrays
arr1 = np.array([[1, 2],
                 [3, 4]])
arr2 = np.array([[5, 6],
                 [7, 8]])

# Flatten arrays
flat_arr1 = arr1.flatten()
flat_arr2 = arr2.flatten()

# Concatenate flattened arrays
concatenated_arr = np.concatenate((flat_arr1, flat_arr2))

print("Flattened Array 1:")
print(flat_arr1)
print("\nFlattened Array 2:")
print(flat_arr2)
print("\nConcatenated Flattened Array:",concatenated_arr)

获得的输出如下所示:

Flattened Array 1:
[1 2 3 4]

Flattened Array 2:
[5 6 7 8]

Concatenated Flattened Array:[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,则子类将被传递,否则,返回的数组将强制为基类数组(默认为 False)。

  • shape (可选) - 输出数组的形状。如果没有给出,则默认为 a.shape。

示例

在这个例子中,我们创建了一个用特定值初始化的 2D NumPy 数组“arr”。然后我们将“arr”扁平化为一个 1D 数组,并用零初始化“flattened_zeros”:

import numpy as np

# Initializing a 2D array
arr = np.array([[1, 2],
                [3, 4]])

# Flattening and initializing with zeros
flattened_zeros = np.zeros_like(arr.flatten())

print("Original Array:")
print(arr)
print("\nFlattened Array with Zeros:",flattened_zeros)

产生的结果如下:

Original Array:
[[1 2]
 [3 4]]

Flattened Array with Zeros: [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]])

# Flatten array
flattened_arr = arr.flatten()

# Find maximum value
max_value = np.max(flattened_arr)

print("Original Array:")
print(arr)
print("\nFlattened Array:")
print(flattened_arr)
print("\nMaximum Value in Flattened Array:",max_value)

我们得到如下所示的输出:

Original Array:
[[1 2]
 [3 4]]

Flattened Array:
[1 2 3 4]

Maximum Value in Flattened Array:4
广告