2011-09-06 96 views
8

假设我已经定义与numpy的多维数组切片

x = numpy.arange(27).reshape((3, 3, 3)) 

现在3x3x3的numpy的阵列,我可以得到含有各3×3子阵列的(0,1)元素的数组与x[:, 0, 1],它返回array([ 1, 10, 19])。如果我有一个元组(m,n)并且想要检索存储在元组中的每个子数组((0,1))的(m,n)元素,该怎么办?例如,假设我有t = (0, 1)。我尝试了x[:, t],但它没有正确的行为 - 它返回每个子阵列的行0和1。我找到的最简单的解决方案是

x.transpose()[tuple(reversed(t))].transpose() 

但我确定必须有更好的方法。当然,在这种情况下,我可以做x[:, t[0], t[1]],但这不能推广到我不知道有多少维数xt具有的情况。

回答

9

,你可以先创建索引记录:

index = (numpy.s_[:],)+t 
x[index] 
+0

酷,谢谢帮助(你也是,wim)。我在[scipy](http://www.scipy.org/Numpy_Example_List)找到了更多s_和slice的示例。我想我以前看过那个清单,但没有看到任何看起来相关的东西。 – James

4

HYRY的解决方案是正确的,但我一直觉得numpy的的r_c_s_指数技巧是一个有点奇怪的寻找。因此,这里是使用slice对象完成同样的事情:

x[(slice(None),) + t] 

这一个参数切片是停止位置(即None意味着所有在同样的方式,x[:]相当于x[None:None]