我正在使用大型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 ...
我希望这是有道理的。非常感谢您的帮助!
答案 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 ++中异步运行的