NumPy reshape 中 -1 的含义是什么?


NumPy 是一个用于数值计算的 Python 库,它提供高效的数组操作,而 numpy.reshape() 函数用于更改数组的形状,其中 -1 表示推断的维度。

在处理数组时,我们经常会遇到需要修改数组形状的情况,但这需要先复制数据,然后将其排列成所需的形状,这很费时。幸运的是,Python 有一个名为 reshape() 的函数可以帮助我们做到这一点。

示例 1:在 NumPy 中查找未知维度

当我们不知道任何数组维度时,我们只允许有一个“未知”维度。

这意味着当使用 reshape 方法时,我们不需要为这些维度中的一个提供数字。我们使用 NumPy 通过传递 -1 值来计算未知维度。

参数值 (2, 2, -1) 表示输出数组的所需形状为 2 行、2 列,其余维度将根据输入数组的大小自动推断。

以下程序展示了在 numpy 数组 reshape() 函数中使用 -1 的方法

# importing numpy module 
import numpy as np
 
# creating a numpy array 
inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22])
 
# reshaping the input array into a 3-dimensional array with 2 rows, 2 columns, and an automatically inferred depth
outputArray = inputArray.reshape(2, 2, -1)
# printing the resultant array
print(outputArray)

输出

[[[15 16]
  [17 18]]

 [[19 20]
  [21 22]]]

示例 2:将 -1 用作未知列数的值

以下程序展示了将 -1 用作未知列数的值的方法

# importing numpy module 
import numpy as np
 
# creating a numpy array 
inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22])
 
# reshaping the input array into a 3-dimensional array with 2 rows, an automatically inferred middle dimension, and 4 columns
outputArray = inputArray.reshape(2, -1, 4)
# printing the resultant array
print(outputArray)

输出

[[[15 16 17 18]]

 [[19 20 21 22]]]

示例 3:将 -1 用作未知行数的值

在下面的示例中,形状指定为 (-1, 4, 2),表示第一个维度将根据输入数组的大小自动推断。输出是一个具有所需形状的三维数组。然后使用 reshape() 函数将 inputArray 重塑成一个三维数组。它有 2 行,一个自动推断的中间维度(使用 -1),和 4 列。-1 参数允许 numpy 根据输入数组的大小和给定的维度自动计算推断维度的尺寸。

# importing numpy module 
import numpy as np
 
# creating a numpy array 
inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22])
 
# reshaping the input array into a 3-dimensional array with an automatically inferred first dimension, 4 columns, and 2 depth elements
outputArray = inputArray.reshape(-1, 4, 2)
# printing the resultant array
print(outputArray)

输出

执行上述程序后,将生成以下输出

[[[15 16]
  [17 18]
  [19 20]
  [21 22]]]

示例 4:对多个未知维度使用 -1

在这个例子中,我们对多个未知维度使用了 -1。因此它引发了错误。

# importing numpy module 
import numpy as np
 
# creating a numpy array 
inputArray = np.array([15, 16, 17, 18, 19, 20, 21, 22])
 
# reshaping the input array into a 3-dimensional array with 2 as the first dimension and an automatically inferred second and third dimension
outputArray = inputArray.reshape(2, -1, -1)
# printing the resultant array
print(outputArray)

输出

Traceback (most recent call last):
  File "/home/cg/root/85901/main.py", line 8, in <module>
    outputArray = inputArray.reshape(2, -1, -1)
ValueError: can only specify one unknown dimension

使用 reshape() 函数展平 NumPy 数组

使用 reshape() 函数将 3D 数组展平为 1D 数组

以下程序通过使用 reshape() 函数将输入的 3D 数组展平为 1D 数组,返回展平的一维数组。

# importing numpy module 
import numpy as np

# creating a 3D array
inputArray = np.array([[1, 3, 5],
                      [7, 9, 11], 
                      [13, 15, 17]])

# flattening 3D input array to 1-dimension using reshape() function
outputArray = inputArray.reshape(-1)
# printing the resultanat flattened array
print("Output flattened array:\n", outputArray)

输出

Output flattened array:
 [ 1  3  5  7  9 11 13 15 17]

使用 reshape() 函数将 2D 数组展平为 1D 数组

以下程序通过使用 reshape() 函数将输入的 2D 数组展平为 1D 数组,返回展平的一维数组。

# importing numpy module 
import numpy as np
 
# creating a 2D array
inputArray = np.array([[15, 16, 17], [18, 19, 20]])
 
# flattening 2D input array to 1-dimension using reshape() function
outputArray = inputArray.reshape(-1)
# printing the resultant flattened array
print("Output flattened array:\n", outputArray)

输出

Output flattened array:
 [15 16 17 18 19 20]

结论

总而言之,NumPy 的 reshape() 函数中的 -1 值用于表示未知维度。它允许 NumPy 根据其他维度和输入数组的大小自动计算该维度的尺寸。此功能在重塑具有已知维度的数组或将多维数组展平为一维数组时特别有用。通过利用 -1,我们可以简化重塑过程,避免手动计算。

更新于:2023年8月17日

356 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告