我正在尝试使用np.asarray(dict.values())
将字典的值转换为一维数组,但是当我尝试打印输出数组的形状时,出现了问题。
我的数组如下所示:
dict_values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26])
但是array.shape的输出是:
()
我期望(27,1)
或(27,)
将代码更改为np.asarray(dict.values()).flatten()
后,array.shape的输出变为
(1,)
我已经阅读了numpy.ndarray.shape
的文档,但无法暗示输出为何如此。有人可以向我解释吗?谢谢
答案 0 :(得分:3)
这必须是python 3。
来自docs
由dict.keys(),dict.values()和dict.items()返回的对象 是视图对象。它们提供了词典的动态视图 条目,这意味着当词典更改时,视图 反映这些变化。
问题在于dict.values()
仅返回字典值中数据的动态视图,从而导致您看到的行为。
dict_a = {'1': 1, '2': 2}
res = np.array(dict_a.values())
res.shape #()
res
#Output:
array(dict_values([1, 2]), dtype=object)
请注意,numpy数组不是将视图对象解析为实际的整数,而是使用dtype = object
为避免此问题,请使用视图以获取列表,如下所示:
dict_a = {'1': 1, '2': 2}
res = np.array(list(dict_a.values()))
res.shape #(2,)
res #array([1, 2])
res.dtype #dtype('int32')