簡體   English   中英

numpy數組:IndexError:數組的索引太多了

[英]numpy array: 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])

事實並非如此

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

為什么這樣 ?

Numpy ndarrays適用於所有元素具有相同的長度。 在這種情況下,您的第二個數組不包含相同長度的列表,因此它最終是一個列表的一維數組,而不是“正確的”二維數組。

來自N維數組的Numpy文檔:

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

這個討論可能有用。

第一個陣列具有形狀(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'>

因此它們都是Numpy數組,但只有第一個可以被視為具有兩個維度的矩陣。

很容易看出問題所在。 嘗試,

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

接着

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

並且你會自己看到問題,如果是兩個,形狀是(3,)。因此索引太多了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM