2017-01-25 8 views
3

私は(非常に)初心者のPythonユーザーですが、PythonコードをRに変換しようとしていますが、配列の再形成に関する混乱した問題が発生しました。 Iは、2行4列の2次元アレイを作ったようnumpy配列の形を変更する次元を追加する

X1 = np.array([[-0.047, -0.113, 0.155, 0.001], 
     [0.039, 0.254, 0.054, 0.201]], dtype=float) 

In:X1 
Out: 
array([[-0.047, -0.113, 0.155, 0.001], 
     [0.039, 0.254, 0.054, 0.201]]) 
In:X1.shape 
Out: (2,4) 

OK:

は、いくつかの例のデータを作成します。私はこれに満足しています。混乱のコード行で発生する:

X2 = X1.reshape((2, -1, 1)) 

In: X2 
Out: 
array([[[-0.047], 
     [-0.113], 
     [0.155], 
     [0.001]], 

     [0.039], 
     [0.254], 
     [0.054], 
     [0.201]]]) 

In: X2.shape 
Out: (2, 4, 1) 

は、だから私は、私は(私はリシェイプコマンドで3桁目1だと思います)余分な次元を追加したことを知っているが、私は他に、この何を理解していませんやった。形状はまだ2行4列あることを意味しますが、明らかに何かが変更されています。もう一度私の動機はRで同じ操作をすることですが、私が知るまでは私がここで変わったことを理解しています。 (これはひどい疑問であれば私には許してください。私は昨日Pythonを始めました!)

答えて

4

reshape(2, -1, 1)あなたはちょうど新しい次元を追加しました。あなたは言っている

* the 1st dimension should be of size 2 
* the 3rd dimension should be of size 1 
* the 2nd should be whatever remains 

ので、唯一の有効なオプションであれば、あなただけの既存の行列に新たな次元を追加したい場合は、正確な使用量は、あなたが出力フォーマットをしたいかに依存します(x[:, np.newaxis, :]ような何かを行う必要があります4。 to be)

+0

本当にありがとうございました。私の例では、「X1」は次元(2,4)を持ち、「X2」は次元(2,4,1)を持っています。なぜなら、それらを印刷すると、「X1」はセルが並んでいる行を示し、 'は個々の細胞を一つずつ示していますか? – user2498193

+1

まあ、2D空間で3Dデータを印刷するのは本当に混乱しています。 'X2'には3つの角括弧があるので、取得するデータは行に沿ってではなく、3次元で並べられます。例えば、 'X2 [0、0、:]'を印字してみてください。 –

+0

okありがとう@blue_note - これは本当に役に立ちました。これらのステップに問題がないことを理解するのに役立ちましたが、それ以降の配列代数は別々に処理されていました - 多くのありがとう! – user2498193

2

2D配列に次元を追加する3つの方法があります。

reshapeの使用方法を理解するには、さまざまな組み合わせを試してください。以下を試してください:

import numpy as np 

X1 = np.array([[-0.047, -0.113, 0.155, 0.001], 
     [0.039, 0.254, 0.054, 0.201]], dtype=float) 

X2 = X1.reshape((1, 2, -1)) 
print(X2) 

>[[[-0.047 -0.113 0.155 0.001] 
    [ 0.039 0.254 0.054 0.201]]] 

X3 = X1.reshape((-1, 1, 2)) 
print(X3) 

>[[[-0.047 -0.113]] 
    [[ 0.155 0.001]] 
    [[ 0.039 0.254]] 
    [[ 0.054 0.201]]] 
+0

良いお礼ありがとうございます – user2498193

関連する問題