📜  numpy reshape (1)

📅  最后修改于: 2023-12-03 15:18:03.077000             🧑  作者: Mango

在 NumPy 中使用 reshape() 函数

NumPy 是 Python 中一个重要的第三方库。在科学计算中常常需要处理大量的数组和矩阵,而 NumPy 则为这类计算提供了丰富的支持。

在 NumPy 中,reshape() 函数是一个重要的操作数组和矩阵的方法。本文将对 reshape() 函数进行介绍,并给出具体的示例代码。

reshape() 函数的基本用法

reshape() 函数用于将一个数组或矩阵重塑为一个新的形状,即改变其维度。具体来说,reshape() 函数可以接受一个整数的元组作为参数,指定要将数组或矩阵重塑为的新形状。例如,如果有一个一维数组,可以使用 reshape() 函数将其重塑为一个二维矩阵,如下所示:

import numpy as np

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

print(f"arr = {arr}")
print(f"mat = {mat}")

输出结果为:

arr = [1 2 3 4 5 6]
mat = [[1 2 3]
       [4 5 6]]

上述代码中,我们首先创建了一个一维数组 arr,然后使用 reshape() 函数将其重塑为一个 2x3 的矩阵 mat。可以看到,数组 arr 的形状已经被改变为 (2, 3),即两行三列的矩阵。

需要注意的是,reshape() 函数返回的是一个新的数组或矩阵,而不是直接改变原数组或矩阵的形状。因此,调用 reshape() 函数后需要使用新的数组或矩阵进行后续操作。

reshape() 函数的高级用法

除了将一个一维数组重塑为一个二维矩阵,reshape() 函数还可以完成许多复杂的操作。以下是 reshape() 函数的高级用法:

将多维数组铺平为一个一维数组

使用 reshape() 函数可以将一个多维数组铺平为一个一维数组。具体来说,只需要将 reshape() 函数的参数指定为一个整数 n,表示将数组中的元素按照每 n 个元素划分为一组,然后将每组中的元素排成一行即可。示例代码如下:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
flat_arr = arr.reshape(-1)

print(f"arr = {arr}")
print(f"flat_arr = {flat_arr}")

输出结果为:

arr = [[1 2 3]
       [4 5 6]
       [7 8 9]]
flat_arr = [1 2 3 4 5 6 7 8 9]

上述代码中,我们首先创建了一个 3x3 的二维数组 arr,然后使用 reshape() 函数将其铺平为一个一维数组 flat_arr。可以看到,数组 arr 中的元素被排成了一行,组成了一个新的一维数组。

将多维数组重塑为高维数组

使用 reshape() 函数还可以将一个多维数组重塑为一个高维数组。具体来说,只需要将 reshape() 函数的参数指定为一个整数的元组,每个整数表示该维度的大小即可。如果后面的维度大小不为 -1,则需要保证该维度大小与数组中元素的总数相等。如果后面的维度大小为 -1,则表示该维度大小需要自动计算。

以下是一个将三维数组重塑为五维数组的示例代码:

import numpy as np

arr = np.arange(24).reshape((2, 3, 4))
new_arr = arr.reshape((2, -1, 2, 2, 1))

print(f"arr = {arr}")
print(f"new_arr = {new_arr}")

输出结果为:

arr = [[[ 0  1  2  3]
        [ 4  5  6  7]
        [ 8  9 10 11]]

       [[12 13 14 15]
        [16 17 18 19]
        [20 21 22 23]]]
new_arr = [[[[[ 0]
              [ 1]]

             [[ 2]
              [ 3]]]

            ...

            [[[20]
              [21]]

             [[22]
              [23]]]]]

上述代码中,我们首先创建了一个 2x3x4 的三维数组 arr,然后使用 reshape() 函数将其重塑为一个 2x2x2x2x1 的五维数组 new_arr。

将一维数组转换为行向量或列向量

使用 reshape() 函数还可以将一个一维数组转换为行向量或列向量。具体来说,如果需要将一维数组转换为行向量,只需要将 reshape() 函数的参数指定为一个二元组 (1, -1),表示将数组重塑为一行,每列自动计算。如果需要将一维数组转换为列向量,只需要将 reshape() 函数的参数指定为一个二元组 (-1, 1),表示将数组重塑为一列,每行自动计算。

以下是一个将一维数组转换为行向量和列向量的示例代码:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])
row_vec = arr.reshape((1, -1))
col_vec = arr.reshape((-1, 1))

print(f"arr = {arr}")
print(f"row_vec = {row_vec}")
print(f"col_vec = {col_vec}")

输出结果为:

arr = [1 2 3 4 5 6]
row_vec = [[1 2 3 4 5 6]]
col_vec = [[1]
           [2]
           [3]
           [4]
           [5]
           [6]]

上述代码中,我们首先创建了一个一维数组 arr,然后使用 reshape() 函数将其转换为行向量和列向量 row_vec 和 col_vec。

总结

本文对 NumPy 中 reshape() 函数进行了介绍,并给出了具体的示例代码。使用 reshape() 函数可以将一个数组或矩阵重塑为一个新的形状,从而方便地进行各种数组和矩阵的操作。使用 reshape() 函数需要注意的是,该函数返回的是一个新的数组或矩阵,而不是直接改变原数组或矩阵的形状。