Python Numpy使用矩阵索引插入矩阵值

Python Numpy使用矩阵索引插入矩阵值,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我有以下代码创建4D网格矩阵,我希望将滚动的2DVAL矩阵插入该网格 import numpy as np k = 100 x = 20 y = 10 z = 3 grid = np.zeros((y, k, x, z)) insert_map = np.random.randint(low=0, high=y, size=(5, k, x)) vals = np.random.random((5, k)) for i in range(x): grid[insert_map[:,

我有以下代码创建4D
网格
矩阵,我希望将滚动的2D
VAL
矩阵插入该网格

import numpy as np

k = 100
x = 20
y = 10
z = 3

grid = np.zeros((y, k, x, z))
insert_map = np.random.randint(low=0, high=y, size=(5, k, x))
vals = np.random.random((5, k))

for i in range(x):
    grid[insert_map[:, :, i], i, 0] = np.roll(vals, i)
如果
VAL
是一个1D数组,我会使用1D
insert_map
数组作为参考,它会工作,但是在多个维度中使用它似乎是一个问题,并且会产生错误:

ValueError: shape mismatch: value array of shape (5,100)  could not be broadcast to indexing result of shape (5,100,3)
我不明白为什么它会说作为
grid[insert_map[:,:,I],I,0]
的错误应该在我的脑海中为网格数组的
y
k
部分给出一个(5100)插入位置,然后用
I
0
修复
x
z
部分


有没有办法通过2D索引将2D(5100)滚动的
VAL
矩阵插入4D(10100,20,3)网格
矩阵?

网格
(y,k,x,z)

insert\u map
(5,k,x)
<代码>插入映射[:,:,i]
然后是
(5,k)

grid[insert_-map[:,:,i],i,0]
将成为
(5,k,z)
<代码>插入映射[]
仅为第一个
y
维度编制索引

vals
(5,k)
<代码>滚动
不会改变这一点

np.roll(vals,i)[…,None]
可以广播以填充
z
维度,如果您需要的话

您的
insert\u映射
无法沿
k
维度选择值。由
randint
创建的值在
y
维度中有效

如果
i
0
应该应用于最后两个维度,则仍然需要
k
维度的索引。可能性是:

grid[insert_map[:, j, i], j, i, 0]
grid[insert_map[:, :, i], 0, i, 0]
grid[insert_map[:, :, i], :, i, 0]
grid[insert_map[:, :, i], np.arange(k), i, 0]