将列表字典转换为1D numpy数组

问题描述 投票:2回答:5

我有一个Python 3字典,包含很长的列表(每个3000万个整数)。我想将所有这些列表拼接成一个numpy数组。我怎样才能有效地做到这一点?

下列

np.array(my_dict.values())

似乎不起作用(我得到array(dict_values([[...], [....]))而不是平坦的1D numpy阵列)。

python arrays numpy dictionary
5个回答
4
投票
from itertools import chain
import numpy as np
chn = chain.from_iterable(d.values())
np.array(list(chn))

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])

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.]])

1
投票

为了获得基于键的有序串联:

np.array([d[k] for k in sorted(d.keys())]).flatten()

如果您不需要任何基于按键的订单,@ Padraic Cunningham的方法是最快的,基于我在这里的时间...


1
投票

试试这个

list(my_dict.values())


(评论补充)

dict.values()返回view而不是列表。请参阅here

© www.soinside.com 2019 - 2024. All rights reserved.