【发布时间】:2018-10-30 21:06:12
【问题描述】:
我正在尝试对这样的多维数组执行非连续切片(Matlab 伪代码)
A = B(:,:,[1,3],[2,4,6]) %A and B are two 4D matrices
但是当我尝试用 Python 编写这段代码时:
A = B[:,:,np.array([0,2]),np.array([1,3,5])] #A and B are two 4D arrays
它给出一个错误:IndexError: shape mismatch: indexing arrays could not be broadcast...
需要注意的是,每次切片一维效果很好!
【问题讨论】:
-
您应该在问题中包含
A和B,以及您的预期输出 -
什么是 B?列表还是 numpy 数组?
-
那段代码不能给你那个错误。唯一的索引数组是
np.array([0,2])和np.array([1,3]),它们 可以 一起广播,它不会像在 matlab 中那样做,并且索引是关闭的,但它不应该给你错误。请提出正确的minimal reproducible example 并运行它以检查它是否重现了您的问题。 -
您需要
np.ix_。 One relevant duplicate,another one。前者的 top-voted 答案显示了如何使用它。另外不要忘记,虽然 MATLAB 索引是从 1 开始的,但 numpy 索引是从 0 开始的。 -
@AndrasDeak。我在上面的代码中错了。两个索引向量的长度不同。