我有一本字典{0: [], 1: [], ...}
。每个清单的长度都不同
如何将这样的字典转换为np.array
对象?
我想得到这样的结构:array([[],[],..., dtype=int32)
答案 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
是“模拟”它们的可能方法之一。在大多数情况下,它们的行为就像一个“粗糙的阵列”。 :)