2016-09-16 19 views
0

nx1(n行、1列)の次元を持つNumpy Arrayがあるとします。この私の使い方はnumpyのを使用して3×1行列として3Dベクトルを実装するためのものですが、アプリケーションはNX1ベクトル行列のために拡張することができます。Python Numpy - Numpy配列ではなく数値としてVector Numpy配列の要素を読み取る

In [0]: import numpy as np 

In [1]: foo = np.array([ ['a11'], ['a21'], ['a31'], ..., ['an1'] ]) 

私は一つの値を参照解除することで、配列の値にアクセスできるようにしたいです。

In [2]: foo[0] 
Out[2]: 'a11' 

In [3]: foo[n] 
Out[3]: 'an1' 

しかし、numpyのアレイの一般的なフォーマットにより、ベクトル配列は2次元配列であると考えられると間接参照の2つの値を必要とする:私は同じ値を取得するfoo[0][0]又はfoo[0][n]を使用しなければなりません。私は1つの行へのベクターのトランスポーズするnp.transposeを使用することができるが、構文が参照解除に2つの値を必要と2D numpyの配列を生成し続ける。したがって

In [4]: np.transpose(foo)[0] == foo[0][0] 
Out[4]: array([ True, False, False], dtype=bool) 

In [5]: np.transpose(foo)[0][0] == foo[0][0] 
Out[5]: True 

これは転置を提供すること任意の利点を無効になります。 1つの参照解除値だけを使用して、ベクトルナンシー配列の要素にアクセスするにはどうすればよいですか?

+0

'foo = np.array(['a11'、 'a21'、 'a31'、...、 'an1'])'と書くことができます。それから 'foo [0]' ''a11''。 Numpyは真の* n *次元配列を持ち、* n *は1になります。 –

+1

また、2-dの場合、 'foo [0,0]'と書くことができます。 –

+0

私はあなたが作った2番目の提案が気に入っていますが、最初のものはベクトル行列の元のフォーマットから取り除き、行列の倍数で使用します。私はMux操作を実行するたびに常に1D配列をトランスポーズすることができますが、そのようなトランスポーズを行う必要はないように思われます。 –

答えて

0

あなたはnumpy.ndarray.tolist()機能を使用できます。

In [1]: foo = np.array([ ['a11'], ['a21'], ['a31'] ]) 
In [2]: foo.tolist() 
Out[2]: [['an1'], ['a2n'], ['a3n']] 

In [3]: foo.tolist()[0] 
Out[3]: ['an1'] 
0

あなたfooは、文字列の2次元配列である:

In [354]: foo = np.array([ ['a11'], ['a21'], ['a31'], ['an1'] ]) 
In [355]: foo.shape 
Out[355]: (4, 1) 
In [356]: foo[0] # selects a 'row' 
Out[356]: 
array(['a11'], 
     dtype='<U3') 
In [357]: foo[0,:] # or more explicitly with the column : 
Out[357]: 
array(['a11'], 
     dtype='<U3') 
In [358]: foo[:,0]  # selects a column, results in a 1d array 
Out[358]: 
array(['a11', 'a21', 'a31', 'an1'], 
     dtype='<U3') 
In [359]: foo[0,0]  # select an element 
Out[359]: 'a11' 

トランスポーズだけの行と列を切り替え、まだ2Dである:

In [360]: foo.T 
Out[360]: 
array([['a11', 'a21', 'a31', 'an1']], 
     dtype='<U3') 
In [361]: _.shape 
Out[361]: (1, 4)  

Ravel(またはflatten)は、1次元配列に変換します。これはアクセス可能です1つのインデックスだけで

In [362]: foo.ravel()[1] 
Out[362]: 'a21' 

あなたの行列の乗算などは、配列が実際には文字列ではなく、 'a21'が配列を表すか、数値であることを示しています。実際には2次元数値配列ですか、あるいは3次元配列ですか?

関連する問題