Numpy Reshape 中的 -1 是什么意思?
NumPy 是一个用于数值计算的 Python 库,可提供高效的数组操作,numpy.reshape() 是一个用于更改数组形状的函数,其中 -1 表示推断的维度。
在使用数组时,我们经常会遇到需要修改数组形状的情况,但这样做需要先复制数据,然后将其排列成所需的形状,这很耗时。幸运的是,Python 有一个名为 reshape() 的函数可以帮助解决这个问题。
示例 1:在 Numpy 中查找未知维度
我们只允许有一个"未知"维度,而我们不知道任何数组维度。
这意味着在使用 reshape 方法时,我们不需要为其中一个维度提供数字。我们使用 NumPy 计算未知维度,并向其传递一个 -1 值。
参数值 (2, 2, -1) 表示输出数组的期望形状为 2 行、2 列,其余维度根据输入数组的大小自动推断。
以下程序显示了 numpy 数组 reshape() 函数中 -1 的使用
# 导入 numpy 模块 import numpy as np # 创建 numpy 数组 inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22]) # 将输入数组重塑为具有 2 行、2 列和自动推断深度的 3 维数组 outputArray = inputArray.reshape(2, 2, -1) # 打印结果数组 print(outputArray)
输出
[[[15 16] [17 18]] [[19 20] [21 22]]]
示例 2:使用 -1 作为未知列数值
以下程序显示使用 -1 作为未知列值
# 导入 numpy 模块 import numpy as np # 创建 numpy 数组 inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22]) # 将输入数组重塑为具有 2 行、自动推断的中间维度和 4 列的 3 维数组 outputArray = inputArray.reshape(2, -1, 4) # 打印结果数组 print(outputArray)
输出
[[[15 16 17 18]] [[19 20 21 22]]]
示例 3:使用 -1 作为未知行数值
在下面给出的示例中,形状指定为 (-1, 4, 2),表示根据输入数组的大小自动推断第一个维度。输出是具有所需形状的三维数组。然后使用 reshape() 函数将 inputArray 重塑为三维数组。它有 2 行、一个自动推断的中间维度(使用 -1)和 4 列。 -1 参数允许 numpy 根据输入数组的大小和给定的维度自动计算推断维度的大小。
# 导入 numpy 模块 import numpy as np # 创建 numpy 数组 inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22]) # 将输入数组重塑为三维数组,其中自动推断出第一维、4 列和 2 个深度元素 outputArray = inputArray.reshape(-1, 4, 2) # 打印结果数组 print(outputArray)
输出
执行时,上述程序将生成以下输出
[[[15 16] [17 18] [19 20] [21 22]]]
示例 4:对多个未知维度使用 -1
在示例中,我们对多个未知维度使用 -1。因此引发了错误。
# 导入 numpy 模块 import numpy as np # 创建 numpy 数组 inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22]) # 将输入数组重塑为三维数组,其中 2 为第一维,第二维和第三维自动推断 outputArray = inputArray.reshape(2, -1, -1) # 打印结果数组 print(outputArray)
输出
回溯(最近一次调用最后一次): 文件"/home/cg/root/85901/main.py",第 8 行,位于 <module> outputArray = inputArray.reshape(2, -1, -1) ValueError: 只能指定一个未知维度
使用 reshape() 函数展平 Numpy 数组
使用 reshape() 函数将 3D 数组展平为 1D 数组
以下程序通过使用 reshape() 函数将输入的 3D 数组展平为 1D 数组,返回展平后的 1 维数组
# 导入 numpy 模块 import numpy as np # 创建 3D 数组 inputArray = np.array([[1, 3, 5], [7, 9, 11], [13, 15, 17]]) # 使用 reshape() 函数将 3D 输入数组展平为 1 维 outputArray = inputArray.reshape(-1) # 打印结果展平数组 print("输出展平数组:\n", outputArray)
输出
输出展平数组: [ 1 3 5 7 9 11 13 15 17]
使用 reshape() 函数将 2D 数组展平为 1D 数组
以下程序通过使用 reshape() 函数将输入 2D 数组展平为 1D 数组,返回展平后的 1 维数组
# 导入 numpy 模块 import numpy as np # 创建 2D数组 inputArray = np.array([[15, 16, 17], [18, 19, 20]]) # 使用 reshape() 函数将 2D 输入数组展平为 1 维 outputArray = inputArray.reshape(-1) # 打印结果展平数组 print("输出展平数组:\n", outputArray)
输出
输出展平数组: [15 16 17 18 19 20]
结论
总之,NumPy 的 reshape() 函数中的值 -1 用于表示未知维度。它允许 NumPy 根据其他维度和输入数组的大小自动计算该维度的大小。此功能在重塑已知维度的数组或将多维数组展平为一维时特别有用。通过利用 -1,我们可以简化重塑过程并避免手动计算。