詳解錯誤---IndexError: too many indices for array

問題來源:參照一個網上案例

問題

這段代碼是有效的:

>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
>>> a[: , 2]
array([ 3,  7, 11])

這段代碼是無效的會報錯:“IndexError: too many indices for array”

>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])
>>> a[:,2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array

解答

關於數組的結構
第一個數組的形狀爲(3,4),第二個數組的形狀爲(3,)。第二個數組缺少第二個維度。np.array無法使用此輸入來構造矩陣(或長度類似的數組)。它只能創建一個列表數組。


>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

>>> print(a)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

>>> print(type(a))
<class 'numpy.ndarray'>


>>> b = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])

>>> print(b)
[list([1, 2, 3, 4]) list([5, 6, 7, 8]) list([9, 10, 11])]

>>> print(type(b))
<class 'numpy.ndarray'>

關於np.ndarray的解答
Numpy ndarray表示所有元素都具有相同的長度。在這種情況下,有數組不包含相同長度的列表,因此它最終是列表的一維數組,而不是“適當的”二維數組。問題源處在【9,10,11】這個數組缺失的一個數值導致維度不準確。

ndarray是具有相同類型和大小的項目的(通常爲固定大小)多維容器。

做如下驗證:

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
a.shape # (3,4)
a.ndim # 2

b = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])
b.shape # (3,)
b.ndim # 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章