2017-09-01 50 views
2

給定一個索引數組,並且我想要一個矩陣B以及A的列的相應置換。在MXNet NDArray的列上使用索引陣列

在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)> 
+0

我的猜測是,一旦採取'()''支持軸= 1',或任何其他軸爲這一問題,那麼這將有一個所謂的「雅緻」解決方案。 –

回答