2015-07-12 59 views
0

欲索引通过多维阵列这样numpy的索引:上的可变轴

a = range(12).reshape(3, 2, 2) 
def fun(axis, state): 
    # if axis=0 
    return a[state, :, :] 
    # if axis=1 it should return a[:, state, :] 

样本输出:

fun(0, 1) 
array([[4, 5],         
     [6, 7]]) 

fun(1, 1) 
array([[2, 3], 
     [6, 7], 
     [10, 11]]) 

总之我希望接受轴作为参数。

我想不出有办法做到这一点。任何可能的解

+1

另见'dynamic axis indexing':http://stackoverflow.com/questions/31094641/dynamic-axis-indexing-of-numpy-ndarray/31094758#31094758;一些'numpy'函数使用'transpose'('rollaxis'),另一些则构造一个索引元组。 – hpaulj

回答

1

可以采取与指定轴线的阵列的视图移到前面使用numpy.rollaxis

def fun(a, axis, state): 
    return numpy.rollaxis(a, axis)[state] 

演示:

>>> a = numpy.arange(12).reshape([3, 2, 2]) 
>>> def fun(a, axis, state): 
...  return numpy.rollaxis(a, axis)[state] 
... 
>>> fun(a, 0, 1) 
array([[4, 5], 
     [6, 7]]) 
>>> fun(a, 1, 1) 
array([[ 2, 3], 
     [ 6, 7], 
     [10, 11]]) 

numpy.rollaxis还支持移动轴到另一个位置时,虽然它解释为什么这是奇怪的论据。