2017-04-16 8 views
-1

キー 'Groups'の最初の要素に配列のリストが含まれている辞書があります。配列のリストから各配列の3番目の要素をスライスする(Python)

stump['Groups'][0] 

[array(['a', 65000, 0], dtype=object), 
array(['a', 95000, 1], dtype=object), 
array(['b', 78000, 1], dtype=object), 
array(['b', 19000, 1], dtype=object)] 

各行の3番目の列をスライスし、いくつかの操作を行いたいとします。 したがって、3番目の列の値は[0,1,1,1]になります。

stump['Groups'][0][:] 
#results in the whole list 
[array(['a', 65000, 0], dtype=object), 
array(['a', 95000, 1], dtype=object), 
array(['b', 78000, 1], dtype=object), 
array(['b', 19000, 1], dtype=object)] 

しかし、[:]の前に別のインデクサ/スライサーを追加するだけで、そのリストの一部をスライス。

とにかくループなしでこれを行うには?

ありがとうございます。

[row[2] for row in stump['Groups'][0]] 

及び配列としてリストで動作するように:理解が仕事をする必要があります

答えて

1

一覧

np.array([...]) 

このリストの要素

array(['a', 65000, 0], dtype=object) 

が対象ですDTYPE配列は、同じもののリストとおおよそ同じです。彼らは値が混ざっています。

あなたがnp.array(またはnp.stack)にリスト全体を包む場合は、他の2D配列としてインデックス付けすることができ、2DオブジェクトDTYPE配列

In [58]: arr=np.array(alist) 
In [59]: arr.shape 
Out[59]: (4, 3) 
In [60]: arr 
Out[60]: 
array([['a', 65000, 0], 
     ['a', 95000, 1], 
     ['b', 78000, 1], 
     ['b', 19000, 1]], dtype=object) 

取得:

In [61]: arr[:,2] 
Out[61]: array([0, 1, 1, 1], dtype=object) 

astype(int)はなるかもしれないがそのオブジェクト配列を数値に変換します。文字列の要素のため、完全な2次元文字列は変換できません。

+0

はええ、私はちょうどただの2D配列としてインデックスに私をできるようになる、配列にリストを回すことができることを忘れてしまったnumpy.arrayタイプのものであると切り株が必要です。ありがとう=) – Moondra

1

リスト内包=>リストオブジェクトを返す

column_list = [row[2] for row in stump['Groups'][0]] 

マップ関数=>マップオブジェクトを返す

column_map = map(lambda row: row[2], stump['Groups'][0]) 

itertools.imap関数=>戻る

column_iterator = itertools.imap(lambda row: row[2], stump['Groups'][0]) 

イテレータnumpyの配列スライス - >はnumpy.arrayを返します。 は、[「グループ」] [0]

columns_array = stump['Groups'][0][:,2] 
関連する問題