2016-11-07 1 views
0

を含むnumpyの配列のインデックスを作成するI持って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 

Iのいずれかの要素を変更した場合はそれがあまりにもalist(同じid)

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

として、実際には2つの要素、同じ2つのサブリストを持っていますこれらのサブリスト、変更はほとんどの目的のために他の構造

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

に表示されたオブジェクトの配列リクこれはリストのようなものです。あなたはそれを形作ることができます、例えば。 `arr.reshape(2,1) 'を追加することはできません。ほとんどのアクションを実行するには、リストのように要素を繰り返し処理する必要があります(またはnumpy)。

コントラストは、整数の2次元配列で

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

が、それは私が配列にarrの要素を変更した場合object障壁を視覚化する意志することができることを:

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) 

今は配列です配列の;まだ2次元配列と同じではありません。

+0

本当にありがとうございます。今度は、オブジェクト配列と他のいくつかの型(?)の配列の違いを理解し始めたと思います。もう少し質問があります。配列はいつオブジェクト配列と固定型配列として開始されますか?たとえば、 'A = np.array([['1'、 '1']、['sd'、 'a']])'は 'S2を型に変換します。アレイ。次に、同じ長さのサブ要素を持つ配列を作成すると、固定された型の多次元配列が作成されます。また、高次元配列のA [x、x]インデックスの背後にある論理的根拠について説明してください。 – noclew

+0

'np.array'は、可能な限り次元配列を作成しようとします。つまり、等しい長さのネストされた配列をすべて処理します。その深さを制限するには、いくつかのトリッキーが必要です。それは多くのSOの質問の対象となっています。 – hpaulj

+0

ありがとうございました。私はより多くの文書を調べます – noclew

1

配列の形状は(2、)です。これは1次元です。これは、コンストラクタ内の最初のサブリストと2番目のサブリストの長さが異なるためです。これは2リストの1次元配列として解釈されます。関数の配列を取得するには、関数を2番目のリストに挿入します(または1番目のリストから関数を削除します)。

+0

ありがとうございます。次に、上記のように配列を使いたいだけなら、それは名前[I] [j]のようなインデックスを作成する唯一の方法ですか? – noclew

+0

いずれにしても、最初に配列にインデックスを付けてから結果リストにインデックスを付ける必要があります。原則として配列にインデックスを付けるもっと複雑な方法がありますが、私はそれがあなたのケースでは意味をなさないと思うでしょう。 – hvwaldow

+0

次に、a = np.array([[1,2,3]、[4,5,6]]のようなNumpy配列は、[1,2]を使って要素にアクセスすることができれば例外ですか? – noclew