ndarray.shape的奇怪输出

时间:2019-03-05 11:17:55

标签: python arrays numpy

我正在尝试使用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的文档,但无法暗示输出为何如此。有人可以向我解释吗?谢谢

1 个答案:

答案 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')