📅  最后修改于: 2023-12-03 15:18:03.077000             🧑  作者: Mango
NumPy 是 Python 中一个重要的第三方库。在科学计算中常常需要处理大量的数组和矩阵,而 NumPy 则为这类计算提供了丰富的支持。
在 NumPy 中,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() 函数的参数指定为一个整数 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() 函数需要注意的是,该函数返回的是一个新的数组或矩阵,而不是直接改变原数组或矩阵的形状。