Numpy Reshape 中的 -1 是什么意思?

pythonnumpyprogramming

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,我们可以简化重塑过程并避免手动计算。


相关文章