NumPy 多维数组转一维

NumPy 数组 的形状可以通过多种方式改变。其中,将多维数组转换为一维数组是 NumPy 数组操作中常见的需求。

NumPy 提供了多种将多维数组转换为一维数组的方式,常用的如下表所示。

NumPy 多维数组转一维的方式
方式 说明
ndarray.flatten()(这是一个方法) 返回一份数组拷贝,原始数组不变
ndarray.ravel()(这是一个方法) 返回展开数组
ndarray.reshape()(这是一个方法) 改变数组的形状
numpy.reshape()(这是一个函数) 改变数组的形状

使用 ndarray.flatten()

在 NumPy 中,我们可以使用 ndarray.flatten() 方法将多维数组转换为一维数组。

语法:

ndarray.flatten()

说明:

flatten() 是数组对象(即 ndarray 对象)的一个方法,它会返回一个新的一维数组,这个数组是原始数组的拷贝,而不是视图。也就是说,对返回的数组进行修改不会影响原始数组。

示例 1:ndarray.flatten() 改变维度

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])    # 创建一个二维数组
arr2 = arr1.flatten()                      # 将二维数组转换为一维数组
print(arr1)
print(arr2)

arr2[0] = 100
print(arr1)
print(arr2)

运行结果如下。

[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]

[[1 2 3]
 [4 5 6]]
[100   2   3   4   5   6]

分析:

在这个例子中,我们首先使用了 np.array() 来创建一个二维数组。从结果可以看出,修改 flatten() 返回的数组并不会影响原数组,即修改 arr2 并不会影响 arr1。

使用 ndarray.ravel()

在 NumPy 中,我们还可以使用 ndarray.ravel() 方法将多维数组转换为一维数组。

语法:

ndarray.ravel()

说明:

ravel() 是数组对象(即 ndarray 对象)的一个方法,用于返回一个展开后的一维数组。通常情况下,ravel() 返回的是原始数组的视图(view),这意味着修改返回的数组可能会影响原始数组。

示例 2:ndarray.ravel() 改变维度

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])    # 创建一个二维数组
arr2 = arr1.ravel()                        # 将二维数组转换为一维数组
print(arr1)
print(arr2)

arr2[0] = 100
print(arr1)
print(arr2)

运行结果如下。

[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]

[[100   2   3]
 [  4   5   6]]
[100   2   3   4   5   6]

分析:

从结果可以看出,修改 ravel() 返回的数组会影响原数组,即修改 arr2 会影响 arr1。

使用 ndarray.reshape()

在 NumPy 中,我们还可以使用 ndarray.reshape() 方法来改变数组的形状,从而将多维数组转换为一维数组。

语法:

ndarray.reshape(newshape)

说明:

ndarray.reshape() 方法是数组对象(即 ndarray 对象)的一个方法,用于返回指定形状的新数组。

参数 newshape 用于指定新的形状,它是一个元组,比如 (行数, 列数)。当 newshape 中的一个维度指定为 -1 时,将自动计算该维度的大小。

示例 3:ndarray.reshape() 改变维度

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])    # 创建一个二维数组
arr2 = arr1.reshape((6,))                # 将二维数组转换为一维数组

print(arr1)
print(arr2)

运行结果如下。

[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]

分析:

arr1.reshape((6,)) 表示将二维数组 arr1 转换为了一个包含 6 个元素的一维数组 arr2。

使用 numpy.reshape()

在 NumPy 中,我们可以使用 numpy.reshape() 函数来改变数组的形状,从而将多维数组转换为一维数组。

语法:

numpy.reshape(arr, newshape)

说明:

numpy.reshape() 函数接收以下 2 个参数。

  • arr:需要改变形状的数组。
  • newshape:新的形状,是一个元组,比如 (行数, 列数)。当 newshape 中的一个维度指定为 -1 时,将自动计算该维度的大小。

提示: ndarray.reshape() 是一个方法,它是 ndarray 对象的方法。而 numpy.reshape() 是一个函数,它是 numpy 包的一个函数。注意,方法和函数是不一样的。

示例 4:numpy.reshape() 改变维度

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])    # 创建一个二维数组
arr2 = np.reshape(arr1, (6,))              # 将二维数组转换为一维数组

print(arr1)
print(arr2)

运行结果如下。

[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]

分析:

numpy.reshape(arr1, (6,)) 表示将二维数组 arr1 转换为了一个包含 6 个元素的一维数组 arr2,效果与 arr1.reshape((6,)) 相同。

示例 5:newshape 指定为 -1

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])    # 创建一个二维数组

# 使用 -1 自动推断长度
arr2 = arr1.reshape(-1)                    # 将二维数组转换为一维数组

print(arr1)
print(arr2)

运行结果如下。

[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]

分析:

使用 -1 会自动推断长度,这是一个使用极高频的 “打平” 操作。

上一篇: NumPy 一维数组转二维

下一篇: NumPy 矩阵

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号