2015-09-18 7 views
5

numpyでスライスした後の結果の配列の形をどのようにして決定するのが難しいですか?たとえば、私は次の簡単なコードを使用しています:このNumpyでスライスした後の結果配列の形状を調べる

import numpy as np 


array=np.arange(27).reshape(3,3,3) 

slice1 = array[:,1:2,1] 
slice2= array[:,1,1] 

print "Content in slice1 is ", slice1 
print "Shape of slice1 is ", slice1.shape 
print "Content in slice2 is ",slice2 
print "Shape of Slice2 is", slice2.shape 

出力は次のようになります。これらの例の両方で

Content in slice1 is 
[[ 4] 
    [13] 
    [22]] 
Shape of slice1 is (3, 1) 
Content in slice2 is [ 4 13 22] 
Shape of Slice2 is (3,) 

、コンテンツが(それがあるべきと)同じです。しかし、彼らは形が異なります。だから、結果の形状はnumpyによってどのように決定されますか?

+1

http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html – Kasramvd

+2

- だから、配列を取り戻しますintegerは毎回次元数を1減らします。 –

+0

'shape'属性があります。 'x .__ array_interface__'を見て、それと他の属性を見てください。 – hpaulj

答えて

5

それは基本的にこれに沸く - あなたがa[1:2]行うと、あなたは1つの要素の配列を求めている

In [118]: a = np.array([1,2,3,4,5]) 

In [119]: a[1:2] 
Out[119]: array([2]) 

In [120]: a[1] 
Out[120]: 2 

a[1]を実行すると、そのインデックスの要素を要求しています。


あなたの場合も同様のことが起こります。

- array[:,1:2,1] - それは、第1次元からのすべての可能なインデックス、第2次元からのインデックスのサブリスト(サブリストは1つの要素のみを含む)、および第3次元からの第1インデックスを意味する。だから、配列の配列を取り戻す -

[[ 4] 
    [13] 
    [22]] 

をあなたが行うと - array[:,1,1]を - それは最初の次元、二次元からの第一のインデックス、および第三の次元から第一インデックスから可能なすべてのインデックスを意味します。とスライスは、次元の数を減らすことはありませんが、インデックス:基本的に

[4 13 22] 
関連する問題