变量轴上的numpy索引

时间:2015-07-12 02:12:08

标签: python python-2.7 python-3.x numpy

我想像这样对多维数组进行索引:

$Arr | Where {($_.Name -notlike '_s1') -and ($_.Name -notlike 'Print$')}

示例输出:

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, :]

简而言之,我想接受轴作为参数。

我无法想办法做到这一点。任何可能的解决方案?

1 个答案:

答案 0 :(得分: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也支持将轴移动到其他位置,虽然它解释参数的方式有点奇怪。