2

如果这已被多次回答,我很抱歉,但我找不到解决方案。

假设以下代码:

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

如何使用切片AB表示(Ie )B的第一个和最后一个维度中的索引?AA[magic] = B

我努力了

  • 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

还有其他建议吗?

4

1 回答 1

0

这些都有效:

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

真的,只有B1内重要,其他可以是任何广播范围,B.shape并受A.shape[0](对于轴1)和A.shape[2](对于轴2)限制,举个荒谬的例子:

A[range(7) + range(3), B, range(9,-1, -1)]

但是你不想使用:,因为你会得到,如你所说,710(或两者!)你想要的数组的“副本”。

A, _, _ = np.meshgrid(np.arange(5),np.arange(7),np.arange(10))
B = (rand(7,10)*A.shape[1]).astype(int)

np.allclose(B, A[0, B, 0])
#True
np.allclose(B, A[B, B, B])
#True
np.allclose(B, A[range(7) + range(3), B, range(9,-1, -1)])
#True
于 2013-11-11T00:44:10.643 回答