我有一个Python 3字典,包含很长的列表(每个3000万个整数)。我想将所有这些列表拼接成一个numpy数组。我怎样才能有效?
以下
np.array(my_dict.values())
似乎不起作用(我得到array(dict_values([[...], [....]))
而不是平坦的1D numpy数组。)
答案 0 :(得分:4)
from itertools import chain
import numpy as np
chn = chain.from_iterable(d.values())
np.array(list(chn))
答案 1 :(得分:3)
如果你正在寻找一个平面的1d数组,你可以使用np.concatenate
:
>>> d = {'a': [1, 2, 3, 4, 5], 'b': [1, 2, 3, 4, 5], 'c': [1, 2, 3, 4, 5]}
>>> np.concatenate(list(d.values()))
array([1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5])
答案 2 :(得分:1)
提前分配numpy数组:
my_dict = {0:[0,3,2,1], 1:[4,2,1,3], 2:[3,4,2,1]}
array = numpy.ndarray((len(my_dict), len(my_dict.values()[0]))
然后您可以将它们插入到数组中,如下所示:
for index, val in enumerate(my_dict.values()):
arr[index] = val
>>> arr
array([[ 0., 3., 2., 1.],
[ 4., 2., 1., 3.],
[ 3., 4., 2., 1.]])
答案 3 :(得分:1)
为了获得基于键的有序连接:
np.array([d[k] for k in sorted(d.keys())]).flatten()
如果您不需要任何基于按键的订单,@ Padraic Cunningham的方法是基于我的时间最快的方法......
答案 4 :(得分:1)