如何通过固定索引将4D numpy数组转换为2D

如何通过固定索引将4D numpy数组转换为2D,numpy,Numpy,我有一个4D numpy数组a的形状(N,N,N),我想通过固定索引对将其转换为二维矩阵M的形状(N,N)。比如说 M[i,j] = A[i,j,i,j] 在numpy中应该如何做到这一点,避免for循环 编辑: 随后,我将使用numpy.ix提供的索引数组访问M的元素,因此以类似方式访问4D数组的元素也是一个解决方案。这是一个解决方法: i,j=np.arange(N),np.arange(N) j_idx,i_idx=np.meshgrid(i,j) M=A[i_idx,j_idx,i_i

我有一个4D numpy数组
a
的形状
(N,N,N)
,我想通过固定索引对将其转换为二维矩阵
M
的形状
(N,N)
。比如说

M[i,j] = A[i,j,i,j]
在numpy中应该如何做到这一点,避免for循环

编辑: 随后,我将使用numpy.ix提供的索引数组访问
M
的元素,因此以类似方式访问4D数组的元素也是一个解决方案。

这是一个解决方法:

i,j=np.arange(N),np.arange(N)
j_idx,i_idx=np.meshgrid(i,j)
M=A[i_idx,j_idx,i_idx,j_idx]
用于预先生成索引模式,然后使用数组
A
获取
M
。正如@hpaulj所建议的,您可以在
np.meshgrid()
中指定
sparse=True
,以获得可广播的一维数组,而不是完整的二维索引数组,从而节省一些空间

您也可以使用
np.ix_389;()
执行此操作:

ixgrid=np.ix(i,j)
M=A[ixgrid+ixgrid]

由于
ixgrid
是一个2元组,
ixgrid+ixgrid
生成索引
a

如何
numpy。重塑
(see)听起来像是一种对角线,一种值的子集。我认为您可以在
meshgrid
中指定
sparse
。这两种方法都有效,谢谢!