NumPy - 数组形状



NumPy 数组形状

NumPy 数组的形状是一个整数元组。元组中的每个整数表示数组沿特定维度或轴的大小。例如,形状为 (3, 4) 的数组有 3 行 4 列。

  • 对于二维数组,形状是一个有两个元素的元组:行数列数
  • 对于三维数组,形状是一个有三个元素的元组:深度行数列数
  • 更高维度的数组遵循相同的模式,每个维度的尺寸都作为元组中的一个额外元素表示。

访问数组形状

可以使用shape属性访问 NumPy 数组的形状。此属性返回一个整数元组,每个整数表示数组沿特定维度的尺寸。

示例

在以下示例中,我们创建一个二维数组,并使用 NumPy 的“shape”属性获取其形状:

import numpy as np

# Creating a 2D array
array = np.array([[1, 2, 3], [4, 5, 6]])

# Accessing the shape
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()函数。如果可能,此函数将返回具有指定形状的数组的新视图。如果无法使用视图进行重塑,则会创建数组的副本。

示例

在此示例中,我们通过将“-1”作为参数传递给 Numpy reshape() 函数,将二维数组的形状更改为一维数组。这会自动推断一个维度的尺寸:

import numpy as np

# Creating a 2D array
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("Original 2D array:\n", array_2d)

# Reshaping to a 1D array
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]

处理重塑错误

有时,如果 NumPy 中的数组重塑使用不正确,可能会导致错误。当尝试将数组重塑为与数组中元素总数不兼容的形状时,就会发生此错误。

重塑时元素总数必须保持不变。如果重塑操作与元素总数不兼容,NumPy 将引发ValueError

示例:不兼容的形状错误

当尝试将数组重塑为与数组中元素总数不兼容的形状时,会发生不兼容的形状错误

在下面的示例中,原始数组有“12”个元素。将其重塑为形状“(3, 5)”需要 15 个元素,这会导致 ValueError:

import numpy as np

# Creating an array with 12 elements
array = np.arange(12)

# Attempting to reshape into a shape that requires more elements
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)

示例:负维度错误

在重塑维度中使用-1告诉 NumPy 自动计算该维度的尺寸。但是,如果剩余的维度与元素总数不匹配,则会引发错误:

import numpy as np

# Creating an array with 10 elements
array = np.arange(10)

# Attempting to reshape with an incompatible automatic dimension
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

# Creating an array with 16 elements
array = np.arange(16)

# Attempting to reshape with an invalid dimension
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
广告