【问题标题】:Using Index Arrays on Columns of an MXNet NDArray在 MXNet NDArray 的列上使用索引数组
【发布时间】:2017-09-01 20:02:49
【问题描述】:

给定一个索引数组index 和一个矩阵A,我想要一个矩阵B 以及A 的列的相应排列。

在 Numpy 中,我会执行以下操作,

>>> A = np.arange(6).reshape(2,3); A
array([[0, 1, 2],
       [3, 4, 5]])
>>> index = [2,0,1]
>>> A[:,index]
array([[2, 0, 1],
       [5, 3, 4]])

在 MXNet 中是否有自然高效方法来做到这一点? pick()take() 函数似乎不能以这种方式工作。我设法想出了以下方法,但它并不优雅。

>>> mx.nd.take(A.T, mx.nd.array([[2],[0],[1]])).T.reshape((2,3))

[[ 2.  0.  1.]
 [ 5.  3.  4.]]
<NDArray 2x3 @cpu(0)>

最后,把扳手扔进工作中,有没有办法就地做到这一点?

更新这是一个稍微优雅一点,但可能效率不高(由于换位)的上述版本:

>>> mx.nd.take(A.T, mx.nd.array([2,0,1])).T
[[ 2.  0.  1.]
 [ 5.  3.  4.]]
<NDArray 2x3 @cpu(0)>

【问题讨论】:

  • 我的猜测是,一旦take() 支持axis=1 或任何其他轴,那么这将有一个所谓的“优雅”解决方案。

标签: mxnet


【解决方案1】:

您需要的是 MXNet 中所谓的高级索引。提交了一个 PR,用于通过 MXNet NDArray 的高级索引获取元素,并将添加设置元素到 NDArray 的功能。预计将在 1.0 版本中发布。

https://github.com/apache/incubator-mxnet/pull/8246

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多