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
廣告