2016-11-07 110 views
0

一個numpy的陣列我有一個numpy的陣列,「nFuncs」包含函數對象作爲打擊:索引包含功能

array([ [<bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>, 
     <bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>, 
     <bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>], 
     [<bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>, 
     <bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>]], dtype=object) 

什麼是指數這個數組的合法的途徑? 當我嘗試nFuncs [1,1]時,我有IndexError:數組索引太多。但是,nFuncs [1] [1]的作品。你能解釋爲什麼我不能使用nFuncs [1,1]?

+2

它可以存儲爲列表的列表。 你有沒有試過'type(nFuncs [1])'? – DeanLa

+0

什麼是「形狀」? – hpaulj

+0

@hpaulj它是(2,) – noclew

回答

1

做一個嵌套列表:

In [8]: alist=[[1,2,3],[4,5]] 
In [9]: len(alist) 
Out[9]: 2 

這2項的列表;這些項目恰好是列表。在某些元視圖中它是2d,但列表本身沒有任何關於2d的內容。

使從它的數組:

In [10]: arr = np.array(alist) 
In [11]: arr.shape 
Out[11]: (2,) 
In [12]: arr.dtype 
Out[12]: dtype('O') 
In [13]: arr 
Out[13]: array([[1, 2, 3], [4, 5]], dtype=object) 
In [14]: arr[0] 
Out[14]: [1, 2, 3] 
In [15]: type(arr[0]) 
Out[15]: list 

它也有2個元素,實際上相同的2子列表作爲alist(相同的id)

In [16]: id(alist[0]) 
Out[16]: 2992863468 
In [17]: id(arr[0]) 
Out[17]: 2992863468 

如果我改變中的一個的元件那些子列表中,變化出現在其他結構中

In [18]: arr[0][1]=3 
In [19]: arr 
Out[19]: array([[1, 3, 3], [4, 5]], dtype=object) 
In [20]: alist 
Out[20]: [[1, 3, 3], [4, 5]] 

對於大多數用途來說,一個對象數組lik這就像一個列表。你可以重塑它,例如。 `arr.reshape(2,1)',但你不能追加到它。要執行大多數操作(或numpy)必須遍歷元素,就像它是一個列表一樣。

對比度與整數的2D陣列

In [21]: A=np.array([[1,2,3],[4,5,6]]) 
In [22]: A 
Out[22]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 
In [23]: A.shape 
Out[23]: (2, 3) 
In [24]: A.dtype 
Out[24]: dtype('int32') 

可能它會以顯現object屏障如果我改變的arr元件成陣列:

In [26]: arr[0]=np.array(arr[0]) 
In [27]: arr[1]=np.array(arr[1]) 
In [28]: arr 
Out[28]: array([array([1, 3, 3]), array([4, 5])], dtype=object) 

它現在是一個數組陣列;但仍然不像2d數組一樣。

+0

我真的很感謝你的親切解釋。現在我想我已經開始理解對象數組和其他一些數組類型(?)之間的區別。還有幾個問題。什麼時候啓動一個數組作爲對象數組和固定類型的數組?例如,'A = np.array([['1','1'],['sd','a']])'使得「| S2'」類型(?)2D數組,而不是對象陣列。那麼,我是否可以這樣認爲,如果我使用具有相同長度的子元素創建一個數組,它將始終創建一個固定類型的多維數組?另外,你能解釋一下高維數組中A [x,x]索引背後的基本原理嗎? – noclew

+0

'np.array'嘗試儘可能創建一個高維數組 - 通過等長嵌套數組一直向下工作。限制該深度需要一些技巧。這是許多SO問題的主題。 – hpaulj

+0

非常感謝。我會研究更多的文件 – noclew

1

數組有形狀(2,):它是一維的。這是因爲構造函數中的第一個和第二個子列表具有不同的長度。所以這被解釋爲2個列表的一維數組。要獲得一組函數,請在第二個列表中插入一個函數(或從第一個列表中刪除一個函數)。

+0

感謝您的輸入。那麼,如果我只是想像上面那樣使用這個數組,它是唯一能像名字[I] [j]一樣索引的方法嗎? – noclew

+0

在任何情況下,您必須首先將數組索引到結果列表中。原則上有更復雜的方式來索引數組,但我認爲這對你的情況不會有幫助。 – hvwaldow

+0

然後,numpy數組像a = np.array([[1,2,3],[4,5,6]])是一個例外,因爲我可以使用[1,2]來訪問元素嗎? – noclew