2016-04-30 18 views
-1

私はテンソルの形状が(4, 3, 20)です。私がX[:, 0, :].shapeをしたときに私は(4, 20)を得る。私がするときX[:, [0,2,0,1], :].shape私は(4, 4, 20)を得る。Numpy:テンソル与えられたインデックスのリストから行列を得る

私が持っているものは、テンソルの第2次元を表すインデックスのリストです。私はX[:, 0, :]のように2次元の行列を得たいのですが、1つではなく2つ目のインデックスで異なるインデックスがあります。それ、どうやったら出来るの?

答えて

0

あなたの質問は不明であるが、私は推測

In [58]: X=np.arange(24).reshape(4,3,2) 

In [59]: X[range(4),[0,2,0,1],:] 
Out[59]: 
array([[ 0, 1], 
     [10, 11], 
     [12, 13], 
     [20, 21]]) 

これは第一平面から0行をピックアップを行います。 2番目の行から2番目の行など。結果はX[:,0,:]と同じ形状ですが、値は異なる1次元平面から引き出されます。

In [61]: X[:,0,:] 
Out[61]: 
array([[ 0, 1], # same 
     [ 6, 7], 
     [12, 13], # same 
     [18, 19]]) 
0

私はあなたがnp.squeezeを探していると思います。したがって、たとえばLのインデックスリストに要素が1つしかなく、入力配列のインデックスを付けると、配列の1番目の次元(長さが1の次元)の配列になると、2Dの出力はとなりますスクイーズイング。複数の要素を持つLの場合、インデックスはの配列にシングルトンディメンションを持たないため、を変更するとに変更されず、結果として望ましい出力が得られます。したがって、それに解決策は次のようになります -

In [25]: A = np.random.rand(4,3,20) 

In [26]: L = [0] 

In [27]: np.squeeze(A[:,L,:]).shape 
Out[27]: (4, 20) 

In [28]: L = [0,2,0,1] 

In [29]: np.squeeze(A[:,L,:]).shape 
Out[29]: (4, 4, 20) 
-

np.squeeze(X[:,L,:]) 

のサンプル実行は、ランダムな配列上の図形をテストします

関連する問題