NumPy ndarray.flatten() 方法



NumPy 的ndarray.flatten()方法用于返回一个新的1维数组,它是原始数组的扁平化副本。

ndarray.flat属性是一个迭代器,而ndarray.flatten()创建一个新的数组。

我们可以指定扁平化的顺序:'C'表示行优先(C风格)顺序,'F'表示列优先(Fortran风格)顺序,'A'表示如果数组是Fortran连续的则为'F',否则为'C','K'表示元素在内存中出现的顺序。

语法

Numpy ndarray.flatten 函数的语法如下:

ndarray.flatten(order='C')

参数

此函数接受一个参数,即 'C',表示行优先,默认为此值。

我们可以赋值为 'F':列优先,'A':如果 a 在内存中是 Fortran 连续的,则以列优先顺序展开,否则以行优先顺序展开;'K':按照元素在内存中出现的顺序展开 a。

返回值

此函数返回一个一维 NumPy 数组,其中包含输入数组中所有元素,按照指定的顺序排列。

示例 1

以下是 NumPy ndarray.flatten() 方法的示例,它展示了如何将一个二维数组以默认的行优先顺序展平成一维数组,结果为 [1, 2, 3, 4, 5, 6]:

import numpy as np

# Creating a 2D numpy array
array_2d = np.array([[1, 2, 3], [4, 5, 6]])

# Flattening the array using the default order ('C')
flattened_array = array_2d.flatten()

print("Original 2D array:")
print(array_2d)
print("\nFlattened array (row-major order):")
print(flattened_array)

输出

Original 2D array:
[[1 2 3]
 [4 5 6]]

Flattened array (row-major order):
[1 2 3 4 5 6]

示例 2

在这个例子中,我们展示了如何将一个三维数组以列优先顺序展平成一维数组,结果为 [1, 5, 3, 7, 2, 6, 4, 8]:

import numpy as np

# Creating a 3D numpy array
array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# Flattening the array using the 'F' order
flattened_array = array_3d.flatten(order='F')

print("Original 3D array:")
print(array_3d)
print("\nFlattened array (column-major order):")
print(flattened_array)

输出

Original 3D array:
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]

Flattened array (column-major order):
[1 5 3 7 2 6 4 8]

示例 3

下面的例子展示了如何使用 'A' 顺序展平一个 Fortran 连续数组,这将导致列优先顺序展平,结果为 [1, 4, 2, 5, 3, 6]:

import numpy as np

# Creating a 2D numpy array with Fortran-contiguous memory layout
array_fortran = np.asfortranarray([[1, 2, 3], [4, 5, 6]])

# Flattening the array using the 'A' order
flattened_array = array_fortran.flatten(order='A')

print("Original Fortran-contiguous 2D array:")
print(array_fortran)
print("\nFlattened array ('A' order):")
print(flattened_array)

输出

Original Fortran-contiguous 2D array:
[[1 2 3]
 [4 5 6]]

Flattened array ('A' order):
[1 4 2 5 3 6]
numpy_array_manipulation.htm
广告
© . All rights reserved.