2017-08-06 13 views
-1

私は形状がnum32の行列を持っています(x,y)。私は、形状が(x,1)yベクトルの垂直スタックであるテンソルを取得したいと思います。私はnp.reshape(2,3,1)を行う際numpy reshape 2次元行列から3次元行列を積み重ねることによって

array([[ 1., 2.], 
     [ 1., 2.], 
     [ 1., 2.]]) 

: は、私は次の行列を考えてみましょう。私が取得します:

array([[[ 1.], 
     [ 2.], 
     [ 1.]], 
     [[ 2.], 
     [ 1.], 
     [ 2.]]]) 

が、私はこれをしたい:あなたは形状(2,3,1)をしたい

array([[[ 1.], 
     [ 1.], 
     [ 1.]], 
     [[ 2.], 
     [ 2.], 
     [ 2.]]]) 
+0

あなたは 'mat.reshape(x、1、y)'を意味しますか?それを試しましたか? –

+0

それは私が望むものではありません。私はテンソル '((x、1)、y)'を求めます – Babak

+1

サンプルコードと結果があなたが望むものとどのように違うのかを示してください。 –

答えて

2
In [135]: arr=np.array([[1,2],[1,2],[1,2]]) 
In [136]: arr.shape 
Out[136]: (3, 2) 
In [137]: arr.transpose() 
Out[137]: 
array([[1, 1, 1], 
     [2, 2, 2]]) 
In [138]: arr.transpose()[:,:,None] 
Out[138]: 
array([[[1], 
     [1], 
     [1]], 

     [[2], 
     [2], 
     [2]]]) 

。 (3,2)から始めると、2軸を切り替えて1軸を追加する必要があることを意味します。これはどちらの順序でも行うことができます。ここでは、切り替えを行うために転置を選択し、次元を追加するには[:,:,None]を選択します。

arr.reshape(3,2,1).swapaxes(0,1)も有効です。より明白に、np.stack(arr[:,:,None],1)

+0

ありがとう!出来た。トリックは行列を転置することだけだったと私は思う。 – Babak

関連する問題