AttributeError:“ NDArray”对象没有属性“ ravel”或“ tolist”

时间:2019-09-01 20:44:18

标签: python mxnet gluon

我正在使用大型NDArray,并尝试递归此嵌套数组中的每个单个整数。名为box_ids的NDArray如下所示:

[[[-1.]
  [-1.]
  [-1.]
  ...
  [-1.]
  [-1.]
  [-1.]]]

当我写

for ids in box_ids[0]:
    print(ids)

我已返回:

<NDArray 1 @cpu(0)>, 
[0.]
<NDArray 1 @cpu(0)>, 
[0.]
<NDArray 1 @cpu(0)>, 
[0.]
<NDArray 1 @cpu(0)>, 
[1.]
<NDArray 1 @cpu(0)>, 
[1.]

...一遍又一遍。

我尝试了box_ids.flatten(),并且产生了相同的结果。因此,我继续尝试.tolist()和.ravel(),但是随后出现属性错误,说Numpy没有这些对象。

基本上,我想要一个数组中所有单个整数的列表,以便可以对它们进行递归。理想情况下,最终列表可能看起来像[0,0,0,1,1,...]。我打印(ids)时每个元素都有换行符和的事实确实令人困惑,我无法弄清楚如何摆脱这种情况。当我打印(ids)时,我只想要看起来像这样的东西: 0 0 1个 1 ...

我希望这是有道理的。非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用mxnet.ndarray.squeeze删除未使用的嵌套维,然后使用mxnet.ndarray.asnumpy转换为numpy数组以提取值列表,如下所示:

box_ids.squeeze().asnumpy().tolist()

如上面的评论中所述,请注意,即使MXNet NDArray在设计上具有与Numpy数组极为相似的API,它们实际上是完全不同的具有不同内部结构的库。请参见this post,了解有关MXNet NDArray特异性的更多详细信息。

NDArray确实非常适合通过CPU或GPU以向量化的方式进行处理,因此在实现NDArray循环手册之前,请考虑是否只能在本机mxnet NDArray中实现处理。这可能会更快,因为mxnet命令是在C ++中异步运行的