1

何百ものキーを持つ Python 辞書があるとします。キーごとに、ディクショナリは 2D 配列を保持します。

これらすべての 2D 配列の行数は同じです。これらの配列を列軸に沿って最終的な 2D 配列に効率的に連結するにはどうすればよいですか?

これを行うために Pandas を使用する価値はありますか? もしそうなら、どのように?

例えば

from collections import OrderedDict()
dct = OrderedDict()
for key in xrange(3):
    dct[key] = np.random.randint(3,size=(2,np.random.randint(10)))

# Print the dictionary:
> dict(dct)
{0: array([[1, 0, 2, 2, 2, 1, 0],
       [1, 2, 2, 1, 1, 1, 0]]),
 1: array([[2, 1, 0, 1, 1],
       [1, 1, 2, 2, 2]]),
 2: array([[2],
       [0]])}

連結の結果は次のようになります。

 array([[1, 0, 2, 2, 2, 1, 0, 2, 1, 0, 1, 1, 2],
        [1, 2, 2, 1, 1, 1, 0, 1, 1, 2, 2, 2, 0]])
4

2 に答える 2

1

私はそれができることに気づきnp.concatenate ました。

np.concatenate(dct.values(), axis= 1)
于 2013-08-13T00:53:14.263 に答える
1

hstack機能はまさにあなたが望むものです。

順序付けされていない dict がありますが、キーには暗黙の順序があるため、おそらくこれが必要です。

>>> dct
defaultdict(<built-in function array>, {0: array([[0, 1, 2, 0, 2, 2, 0],
   [0, 0, 0, 2, 0, 0, 2]]), 1: array([[0, 1, 2, 0, 0],
   [0, 0, 1, 2, 2]]), 2: array([[1, 1, 0, 0],
   [0, 1, 1, 2]])})
>>> np.hstack(dct[k] for k in sorted(dct))
array([[0, 1, 2, 0, 2, 2, 0, 0, 1, 2, 0, 0, 1, 1, 0, 0],
       [0, 0, 0, 2, 0, 0, 2, 0, 0, 1, 2, 2, 0, 1, 1, 2]])

OrderedDictの代わりに使用するように質問を変更したdefaultdictので、値は既に正しい順序になっているので、もちろんdct.values()代わりに使用できます。

于 2013-08-13T00:52:30.980 に答える