NumPy - 数组形状
NumPy 数组形状
NumPy 数组的形状是一个整数元组。元组中的每个整数表示数组沿特定维度或轴的大小。例如,形状为 (3, 4) 的数组有 3 行和 4 列。
- 对于 2D 数组,形状是一个包含两个元素的元组:行数,列数。
- 对于 3D 数组,形状是一个包含三个元素的元组:深度,行数,列数。
- 更高维数组遵循相同的模式,每个维度的大小在元组中表示为一个额外元素。
访问数组形状
您可以使用 shape 属性访问 NumPy 数组的形状。此属性返回一个整数元组,每个整数表示数组沿特定维度的大小。
示例
在以下示例中,我们创建了一个 2D 数组,并使用 NumPy 的 "shape" 属性获取其形状 −
import numpy as np
# 创建一个 2D 数组
array = np.array([[1, 2, 3], [4, 5, 6]])
# 访问形状
print("Shape of the array:", array.shape)
print("Number of dimensions:", array.ndim)
print("Total number of elements:", array.size)
形状 (2, 3) 表示该数组有 2 行和 3 列。它是一个二维数组 −
Shape of the array: (2, 3) Number of dimensions: 2 Total number of elements: 6
改变数组形状
改变 NumPy 数组的形状指的是在不更改其数据的情况下转换数组的维度。例如,可以将一维数组重塑为二维数组,反之亦然,只要总元素数量保持不变即可。
在 NumPy 中重塑数组,我们使用 reshape() 函数。此函数如果可能,会返回具有指定形状的数组的新视图。如果无法使用视图进行重塑,则会创建数组的副本。
示例
在这个示例中,我们通过向 Numpy reshape() 函数传递 "-1" 作为参数,将 2D 数组的形状更改为 1D 数组。这会自动推断一个维度的大小 −
import numpy as np
# 创建一个 2D 数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("Original 2D array:\n", array_2d)
# 重塑为 1D 数组
array_flattened = array_2d.reshape(-1)
print("Flattened to 1D array:", array_flattened)
这将产生以下结果 −
Original 2D array: [[1 2 3] [4 5 6]] Flattened to 1D array: [1 2 3 4 5 6]
处理 Reshape 错误
在 NumPy 中,有时如果使用不当,重塑数组可能会导致错误。此错误发生在尝试将数组重塑为与数组总元素数量不兼容的形状时。
重塑时,总元素数量必须保持不变。如果 reshape 操作与总元素数量不兼容,NumPy 将引发 ValueError。
示例:不兼容形状错误
不兼容形状错误 发生在尝试将数组重塑为与数组总元素数量不兼容的形状时。
在下面的示例中,原始数组有 12 个元素。将它重塑为形状 "(3, 5)" 需要 15 个元素,这会导致 ValueError −
import numpy as np
# 创建一个包含 12 个元素的数组
array = np.arange(12)
# 尝试重塑为需要更多元素的形状
try:
reshaped_array = array.reshape((3, 5))
except ValueError as e:
print("Error:", e)
以上代码的输出如下 −
Error: cannot reshape array of size 12 into shape (3,5)
示例:负维度错误
在 reshape 维度中使用 -1 会告诉 NumPy 自动计算该维度的大小。但是,如果剩余维度与总元素数量不匹配,将引发错误 −
import numpy as np
# 创建一个包含 10 个元素的数组
array = np.arange(10)
# 尝试使用不兼容的自动维度进行重塑
try:
reshaped_array = array.reshape((2, -1, 4))
except ValueError as e:
print("Error:", e)
获得的输出如下所示 −
Error: cannot reshape array of size 10 into shape (2,newaxis,4)
示例:不正确的维度指定
指定不正确或非整数的维度值(例如,除了 -1 以外的负值,或非整数)可能会导致错误 −
import numpy as np
# 创建一个包含 16 个元素的数组
array = np.arange(16)
# 尝试使用无效维度进行重塑
try:
reshaped_array = array.reshape((4, 4.5))
except ValueError as e:
print("Error:", e)
执行以上代码后,我们得到以下输出 −
Traceback (most recent call last): File "/home/cg/root/669f5fd83ed84/main.py", line 8, in <module> reshaped_array = array.reshape((4, 4.5)) TypeError: 'float' object cannot be interpreted as an integer