私はすべて同じ10個のキーワードで辞書のリストを持っています。辞書のリストを1Dのnumpyの配列に変換する
10個の1D numpy配列に変換するきちんとした方法をお探しです。効率は重要ではない。
現在20行のコードです。
names = [x['name'] for x in fields]
names = np.asarray(names)
など
私はすべて同じ10個のキーワードで辞書のリストを持っています。辞書のリストを1Dのnumpyの配列に変換する
10個の1D numpy配列に変換するきちんとした方法をお探しです。効率は重要ではない。
現在20行のコードです。
names = [x['name'] for x in fields]
names = np.asarray(names)
など
あなたは、ネストされたリストの内包表記を使用することができます。
[np.asarray([x[attribute] for x in fields]) for attribute in ['name', 'age', 'address']]
や辞書の理解:例として
{attribute:np.asarray([x[attribute] for x in fields]) for attribute in ['name', 'age', 'address']}
:
>>> fields = [{'name': 'A', 'age': 25, 'address' : 'NYC'}, {'name': 'B', 'age': 32, 'address' : 'LA'}]
>>> [np.asarray([x[attribute] for x in fields]) for attribute in ['name', 'age', 'address']]
[array(['A', 'B'],
dtype='|S1'), array([25, 32]), array(['NYC', 'LA'],
dtype='|S3')]
>>> {attribute:np.asarray([x[attribute] for x in fields]) for attribute in ['name', 'age', 'address']}
{'age': array([25, 32]), 'name': array(['A', 'B'],
dtype='|S1'), 'address': array(['NYC', 'LA'],
dtype='|S3')}
は自動的な方法で属性を取得するには、使用できます。
>>> pd.DataFrame(fields)
address age name
0 NYC 25 A
1 LA 32 B
それは速いたくさんのようになります
>>> fields[0].keys()
['age', 'name', 'address']
最後に、パンダはおそらくあなたのデータのために最も適したタイプです配列のリストに対して何らかの操作を実行できるようにする必要があります。
括弧で囲まれた' np.asarray([x]はフィールドのxの属性) '? – Zero
@zero:確かに。ありがとう –
A
を辞書の入力リストとします。
np.column_stack([i.values() for i in A])
サンプルラン - - キーワードごとに各列の保持データを有する2Dアレイ出力について
In [217]: A # input list of 2 dictionaries, each with same 3 keywords
Out[217]:
[{'a': array([6, 8, 2]), 'b': array([7, 7, 3]), 'c': array([6, 6, 4])},
{'a': array([4, 4, 3]), 'b': array([7, 1, 6]), 'c': array([6, 1, 5])}]
In [244]: np.column_stack([i.values() for i in A])
Out[244]:
array([[6, 8, 2, 4, 4, 3], # key : a
[6, 6, 4, 6, 1, 5], # key : c
[7, 7, 3, 7, 1, 6]]) # key : b
# Get those keywords per row with `keys()` :
In [263]: A[0].keys()
Out[263]: ['a', 'c', 'b']
つ以上のサンプルラン
In [245]: fields # sample from @Eric's solution
Out[245]:
[{'address': 'NYC', 'age': 25, 'name': 'A'},
{'address': 'LA', 'age': 32, 'name': 'B'}]
In [246]: np.column_stack([i.values() for i in fields])
Out[246]:
array([['25', '32'],
['A', 'B'],
['NYC', 'LA']],
dtype='|S21')
In [267]: fields[0].keys()
Out[267]: ['age', 'name', 'address']
*効率は重要ではありません*何か特別な理由から? – ZdaR
したがって、出力は2D配列になりますか、それとも1D配列のリストになりますか? – Divakar
パンダを使用している場合は、 'pd.DataFrame(fields).T.values' – Zero