在numpy中切割具有2D阵列的3D阵列?

时间:2013-11-10 19:11:40

标签: numpy scipy

如果已经多次回答,我很抱歉,但我找不到解决办法。

假设以下代码:

import numpy as np
A,_,_ = np.meshgrid(np.arange(5),np.arange(7),np.arange(10))
B = (rand(7,10)*5).astype(int)

如何使用AB进行切片,以便B代表A的第一个和最后一个维度中的索引(即A[magic] = B)?< / p>

我试过了

  • A[:,B,:]由于高级索引的特殊性而无法正常工作。
  • A[:,B,np.arange(10)]生成7个我之后的矩阵
  • A[np.arange(7),B,np.arange(10)]给出错误:
  

ValueError: shape mismatch: objects cannot be broadcast to a single shape

还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

这两种方法都有效:

A[0, B, 0]
A[B, B, B]

实际上,只有轴B中的1很重要,其他范围可以是广播到B.shape且受A.shape[0]限制的任何范围(对于轴{{ 1}})和1(对于轴A.shape[2]),这是一个荒谬的例子:

2

但你不想使用A[range(7) + range(3), B, range(9,-1, -1)] ,因为那样你就可以得到:7(或两者!)阵列的“副本”你想。

10