带有dtype = int32的值列表转换为np.array对象的Dict

时间:2017-06-23 10:52:10

标签: python arrays list numpy dictionary

我有一本字典{0: [], 1: [], ...}。每个清单的长度都不同 如何将这样的字典转换为np.array对象?
我想得到这样的结构:array([[],[],..., dtype=int32)

3 个答案:

答案 0 :(得分:0)

你试过这个吗?

np.array(list(d.values()))

输出

array([], shape=(2, 0), dtype=float64)

答案 1 :(得分:0)

奇怪的是,将dict放入numpy数组是有效的。同时将列出的值放入数组中也可以。

import numpy as np

d = {0: [1, 2], 1: [3, 6, 7]}
arr = np.array(d)
print(arr)
li = d.values()
print(li)
arr2 = np.array(li)
print(arr2)

答案 2 :(得分:0)

如果列表长度不同,您可以使用np.ma.MaskedArray

import numpy as np

maxlen = max(len(lst) for lst in d.values())   # maximum length of all value-lists

arr = np.ma.MaskedArray(np.zeros((len(d), maxlen), dtype='int32'), 
                        mask=True, 
                        dtype='int32')

for line, lst in d.items():
    arr[line, :len(lst)] = lst

# In case the "keys" of your dictionary don't represent the "rows" you need to
# use another (more robust) approach:
# for idx, (line, lst) in enumerate(sorted(d.items())):
#     arr[idx, :len(lst)] = lst

例如:

d = {0: [], 1: [1], 2: [1, 2]}

给出arr这样的内容:

masked_array(data =
 [[-- --]
 [1 --]
 [1 2]],
             mask =
 [[ True  True]
 [False  True]
 [False False]],
       fill_value = 999999)

它与空列表不同,但NumPy不支持不规则数组,因此MaskedArray是“模拟”它们的可能方法之一。在大多数情况下,它们的行为就像一个“粗糙的阵列”。 :)