【问题标题】:AttributeError: 'NDArray' object has no attribute 'ravel' or 'tolist'AttributeError:“NDArray”对象没有属性“ravel”或“tolist”
【发布时间】:2019-09-01 20:44:18
【问题描述】:

我正在处理一个庞大的 NDArray,并试图递归这个嵌套数组中的每个单独的整数。 NDArray,称为 box_ids,如下所示:

[[[-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, ...]。当我 print(ids) 时每个元素都有换行符 and ,这一事实确实令人困惑,我不知道如何摆脱它。当我打印(ids)时,我只想要一些看起来像: 0 0 1 1...

我希望这是有道理的。如果可以的话,非常感谢您的帮助!

【问题讨论】:

  • [i[0] for i in a[0] 呢?
  • 那个NDArray不是numpy的东西。 numpy定义numpy.ndarray,而不是NDArray
  • @Goyo 有什么可以解决我的 NDArray 问题的吗?
  • 可能是查看它来自哪个包的文档,我不知道,因为你没有告诉我们。
  • mxnet.incubator.apache.org/api/python/ndarray/ndarray.html - mxnet NDArraynumpy.ndarray 相似但不相同。

标签: python mxnet gluon


【解决方案1】:

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

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

正如上面评论中提到的,请注意,尽管 MXNet NDArray 在设计上具有与 Numpy 数组极为相似的 API,但它们实际上是具有不同内部结构的完全不同的库。有关 MXNet NDArray 特性的更多详细信息,请参阅this post

NDArray 非常擅长在 CPU 或 GPU 上以矢量化方式执行操作,因此在对 NDArray 实施手动 for 循环之前,请考虑是否只能在本机 mxnet NDArray 中实施。这可能会快得多,因为 mxnet 命令是在 C++ 中异步运行的

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多