2016-07-04 10 views
1

私は次元が違う3d numpy配列を持っています。私は、最大の2つの次元に平行して、最小の中間点にスライスをプロットしたいと思います。どのようにスライスを取得するのですか?numpy配列の中で最大の2次元スライスを得るにはどうすればよいですか?

私の元のデータが

np.ones(3*4*5).reshape(3,4,5) 

ある場合、私は、彼らが大きくなっているので、それが最小と他の二つの次元の全てであるとして最初のディメンションものの、途中でデータセット

np.ones(3*4*5).reshape(3,4,5)[1,:,:] 

を取得したいと思います。

答えて

1

あなたはこのようなタスクのためnp.rollaxisを使用することができ、それはそうのような、任意の多次元ndarrayのために働くだろう -

def ndim_largest_slice(arr): 
    shp = arr.shape 
    return np.rollaxis(arr, np.argmin(shp), 0)[shp[np.argmin(shp)]/2] 

サンプルの実行 -

In [511]: arr = np.random.rand(6,7,6,3,4,5) 

In [512]: np.allclose(ndim_largest_slice(arr),arr[:,:,:,1,:,:]) 
Out[512]: True 

In [513]: arr = np.random.rand(6,7,6,4,5,5) 

In [514]: np.allclose(ndim_largest_slice(arr),arr[:,:,:,2,:,:]) 
Out[514]: True 

In [515]: arr = np.random.rand(3,4,5) 

In [516]: np.allclose(ndim_largest_slice(arr),arr[1,:,:]) 
Out[516]: True 
関連する問題