1

假设我有一个包含 100 个键的 Python 字典。对于每个键,字典都包含一个二维数组。

所有这些二维数组都具有相同的行数。如何沿列轴在最终的二维数组中有效地连接这些数组?

值得为此通过熊猫吗?如果是这样,怎么做?

例如

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

hstack功能正是您想要的。

由于您有一个无序的字典,但键中有一个隐含的顺序,您可能想要这个:

>>> 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 回答
1

我才意识到np.concatenate 可以做到。

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