【发布时间】: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